标签:tran 最大值 ++ mat 增加 let i+1 fun length
给定一个整数数组 A,对于每个整数 A[i],我们可以选择 x = -K 或是 x = K,并将 x 加到 A[i] 中。
在此过程之后,我们得到一些数组 B。
返回 B 的最大值和 B 的最小值之间可能存在的最小差值。
示例 1
输入:A = [1], K = 0
输出:0
解释:B = [1]
示例 3:
输入:A = [1,3,6], K = 3
输出:3
解释:B = [4,6,3]
对于数组A,如果 A[i] < A[j],将较小的值A[i]增加K,较大的值A[j]减少K,则它们之间的差值一定比原来更小,这是因为区间 (A[i] + K, A[j] - K) 是 (A[i] - K, A[j] + K) 的子集(这里,当 a > b 时 (a, b) 表示 (b, a) )。那我们何不对数组进行排序,在排序中的数组中,找到一个位置 i,将 i 右侧的值做加 K 操作,i右侧的值做减 K 操作,即A[0]...A[i]全部加上K,A[i+1]...A[n-1]全部减去K。此时,整个数组的最大值只可能是 A[n-1]-K 或者 A[i]+K, 而最小值只可能是 A[0]+K 或 A[i+1]-K。那我们只需要遍历整个数组 A,找出 位置 i,使得 数组 B 中最大值和最小值的差值最小。
var smallestRangeII = function(A, K) {
A.sort((a,b) => {return a-b});
len = A.length;
minNum = A[0];
maxNum = A[ len - 1 ];
res = maxNum - minNum;
for(let i = 0; i < len - 1; i++) {
res = Math.min(res, Math.max(maxNum-K, A[i] + K) - Math.min(minNum + K, A[i + 1] - K))
}
return res;
};
标签:tran 最大值 ++ mat 增加 let i+1 fun length
原文地址:https://www.cnblogs.com/xwwblog/p/13447818.html