Skip to content

Latest commit

 

History

History
29 lines (27 loc) · 908 Bytes

910最小差值II.md

File metadata and controls

29 lines (27 loc) · 908 Bytes
func smallestRangeII(nums []int, k int) int {
    // 贪心:在排序后的数组中i下标处切一刀,左边小的这部分集体+k,右边大的部分集体-k
    // 遍历寻找i点,使得新的max-min最小
    n := len(nums)
    sort.Ints(nums)
    diff := nums[n-1] - nums[0] // 初始化也覆盖了一种情况,就是不切,所有数增加或减少k,差值不变
    for i := 0; i < n-1; i++ { 
        curMax := max(nums[n-1]-k, nums[i]+k) // 在i点切,可能的最大值是原本的最大值nums[n-1]-k或者nums[i]+k
        curMin := min(nums[0]+k, nums[i+1]-k) // 在i点切,可能的最小值值是原本的最小值nums[0+k或者nums[i+1]-k
        diff = min(diff, curMax - curMin)
    }
    return diff
}

func max(x, y int) int {
    if x > y {
        return x
    }
    return y
}

func min(x, y int) int {
    if x < y {
        return x
    }
    return y
}