leetcode Smallest Range I

题目

题目大意:给定一个数组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;
    }
};

猜你喜欢

转载自blog.csdn.net/Exaggeration08/article/details/86560390
今日推荐