给你一个整数数组 A,请你给数组中的每个元素 A[i] 都加上一个任意数字 x (-K <= x <= K),从而得到一个新数组 B 。
返回数组 B 的最大值和最小值之间可能存在的最小差值。
循环遍历找到最大最小值
时间复杂度:O(N)
空间复杂度:O(1)
我们只需要找到最大值与最小值的差,若大于2k则取max-min-2k,否则差值可通过调节k值取0
class Solution {
public int smallestRangeI(int[] A, int K) {
int min = A[0];
int max = A[0];
for(int i : A){
min = Math.min(i, min);
max = Math.max(i, max);
}
return Math.max(0, max - min - 2 * K);
}
}
使用快速排序找到最值
时间复杂度:O(NlogN)
空间复杂度:O(1)
class Solution {
public int smallestRangeI(int[] A, int K) {
Arrays.sort(A);
int min = A[0];
int max = A[A.length - 1];
return Math.max(0, max - min - 2 * K);
}
}