Skip to main content
  1. Posts/

LeetCode-910 最小差值 II

·1 min·

LeetCode-910 最小差值 II #

Solution 1 #

希望尽可能减少数组的差值, 操作是 “大的变小, 小的变大”. 枚举分界坐标 $i$, 使得 $nums[:i+1]$ 都加上 $k$, $nums[i+1:]$都减去 $k$, 计算这种情况下的差值, 更新答案.

代码如下:

class Solution:
    def smallestRangeII(self, nums: List[int], k: int) -> int:
        n = len(nums)
        nums = sorted(nums)
        ans = max(nums) - min(nums)
        for i in range(0, n - 1):
            ans = min(ans, max(nums[i] + k, nums[n - 1] - k) - min(nums[0] + k, nums[i + 1] - k))
        return ans