Algorithm


Problem Name: 910. Smallest Range II

You are given an integer array nums and an integer k.

For each index i where 0 <= i < nums.length, change nums[i] to be either nums[i] + k or nums[i] - k.

The score of nums is the difference between the maximum and minimum elements in nums.

Return the minimum score of nums after changing the values at each index.

 

Example 1:

Input: nums = [1], k = 0
Output: 0
Explanation: The score is max(nums) - min(nums) = 1 - 1 = 0.

Example 2:

Input: nums = [0,10], k = 2
Output: 6
Explanation: Change nums to be [2, 8]. The score is max(nums) - min(nums) = 8 - 2 = 6.

Example 3:

Input: nums = [1,3,6], k = 3
Output: 3
Explanation: Change nums to be [4, 6, 3]. The score is max(nums) - min(nums) = 6 - 3 = 3.

 

Constraints:

  • 1 <= nums.length <= 104
  • 0 <= nums[i] <= 104
  • 0 <= k <= 104

Code Examples

#1 Code Example with Javascript Programming

Code - Javascript Programming


const smallestRangeII = function (nums, k) {
  let n = nums.length
  nums.sort((a, b) => a - b)
  // all elements plus k or minus k
  let res = nums[n - 1] - nums[0]

  // left side elements plus k, right side elements minus k
  let left = nums[0] + k, right = nums[n - 1] - k
  for(let i = 0; i  <  n - 1; i++) {
    const tmax = Math.max(right, nums[i] + k)
    const tmin = Math.min(left, nums[i + 1] - k)
    res = Math.min(res, tmax - tmin)
  }

  return res
}
Copy The Code & Try With Live Editor

Input

x
+
cmd
nums = [1], k = 0

#2 Code Example with Python Programming

Code - Python Programming


class Solution:
    def smallestRangeII(self, A, K):
        A.sort()
        return min([max(A[-1] - K, A[i] + K) - min(A[0] + K, A[i + 1] - K) for i in range(len(A) - 1)] + [A[-1] - A[0]])
Copy The Code & Try With Live Editor

Input

x
+
cmd
nums = [1], k = 0
Advertisements

Demonstration


Previous
#909 Leetcode Snakes and Ladders Solution in C, C++, Java, JavaScript, Python, C# Leetcode
Next
#911 Leetcode Online Election Solution in C, C++, Java, JavaScript, Python, C# Leetcode