题目大意:给定一个数组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;
}
};
最小化数组差值算法
本文探讨了如何通过调整数组中的元素,使调整后的数组最大值与最小值之间的差值达到最小的问题。针对不同情况,文章提出了两种解决方案,并提供了详细的算法实现代码。
310

被折叠的 条评论
为什么被折叠?



