https://leetcode.com/problems/smallest-range-ii/description/
题目大意:同908,只是现在只能+k 或者-k,问最小的差距是多少。
解题思路:先将A排序,考虑 两种变化 (up,down) 和 (down,up) 前者显然优于后者。所以对于A数组的最小值,最大值,肯定是min+K , max-K。 对于每一个 A[i] ,A[i+1] ,比较 min+K,A[i]+K, max-K, A[i+1]-K 之间的关系即可
class Solution {
public:
int smallestRangeII(vector<int>& A, int K) {
int n = A.size();
if(n==1) return 0;
sort(A.begin(),A.end());
int res = A[n-1]-A[0];
for(int i=0;i<n;i++)
{
int a = A[i],b =A[i+1];
int high = max(a+K,A[n-1]-K);
int low =min(b-K,A[0]+K);
res = min(res,high - low);
}
return res;
}
};