题目大意:给定一个数组A和x(K<=x<=-K),对数组A中的每个数字都加上x,每个数字加的x可以不同,最后得到新的数组B,使得B中的最大值和最小值之差最小;
解题思路:最后要求的是最大值和最小值之差最小,所以仅需考虑数组A中的最大值和最小值;
情况1:数组A中的最大值和最小值之差<=2*K,则说明可以使得min+x1=max+x2成立,最后数组B的最大值和最小值之差为0;
情况2:数组B中的最大值和最小值之差>2*K,则只有当最小值+K,最大值-K,才会使最后结果最小,但两者之差不可能等于0.
源码附上:
class Solution {
public:
int smallestRangeI(vector<int>& A, int K) {
int max=*max_element(A.begin(),A.end());
int min=*min_element(A.begin(),A.end());
int result=max-min<=2*K?0:(max-K-(min+K));
return result;
}
};