题目
代码部分一(16ms)
class Solution {
public int smallestRangeII(int[] A, int K) {
Arrays.sort(A);
int len = A.length;
int res = A[len-1] - A[0];
int min = A[0] + K;
int max = A[len-1] - K;
for(int i = 1; i < len; i++){
int min2 = Math.min(min, A[i]-K);
int max2 = Math.max(max, A[i-1]+K);
int temp = max2 - min2;
res = temp < res ? temp : res;
}
return res;
}
}
代码部分二(40ms)
class Solution {
public int smallestRangeII(int[] A, int K) {
if(A.length == 1)
return 0;
int k2 = K * 2;
Arrays.sort(A);
int len = A.length;
for(int i = 0; i < len; i++)
A[i] -= K;
int res = A[len-1] - A[0];
TreeSet<Integer> set = new TreeSet();
for(int i = 1; i < len; i++){
int val = A[i - 1];
set.add(val + k2);
int min = Math.min(A[i], set.first());
int max = Math.max(A[len - 1], set.last());
res = Math.min(res, max - min);
}
return res;
}
}