题目

https://leetcode-cn.com/problems/smallest-range-i/

分析

ma为最大值,mi为最小值。x为ma修改时加的数,y为mi修改时加的数。 修改后的差值=(ma+x)-(mi+y)=(ma-mi)+(x-y) x,y属于[-k,k] (x-y)范围 [-2k,2k] x-y=mi-ma时,左式为0,最小。 如果原始差值绝对值大于2k的绝对值,那么不能完全消除差距使差值为0,只能抵消2k那部分。

代码

class Solution {
    public int smallestRangeI(int[] nums, int k) {
        int change1=k*2;
        int change2=-k*2;
        int max=-1;
        int min=10001;
        for(int num:nums){
            max=Math.max(num,max);
            min=Math.min(num,min);
        }
        int distance=max-min;
        if(k==0){
            return distance;
        }
        if(distance<=change1){
            return 0;
        }
        else{
            return distance-change1;
        }
    }
}