给你一个整数数组 A,对于每个整数 A[i],我们可以选择处于区间 [-K, K] 中的任意数 x ,将 x 与 A[i] 相加,结果存入 A[i] 。
在此过程之后,我们得到一些数组 B。
返回 B 的最大值和 B 的最小值之间可能存在的最小差值。
示例 1:
输入:A = [1], K = 0
输出:0
解释:B = [1]
示例 2:
输入:A = [0,10], K = 2
输出:6
解释:B = [2,8]
示例 3:
输入:A = [1,3,6], K = 3
输出:0
解释:B = [3,3,3] 或 B = [4,4,4]
class Solution {
public:
int smallestRangeI(vector<int>& A, int K) {
int min = A[0];
int max = A[0];
for(int i = 1; i < A.size(); i++) {
if(min > A[i])
min = A[i];
if(max < A[i])
max = A[i];
}
//int result = (max - K) - (min + K);
int result = max - min - 2 * K;
if(result < 0)
return 0;
return result;
}
};
参照大牛写法,速度提升了一倍
static int n=[](){std::ios::sync_with_stdio(false);std::cin.tie(nullptr);return 0;}();
class Solution {
public:
int smallestRangeI(vector<int>& A, int K) {
int minVal = 10000;
int maxVal = 0;
for(int a : A) {
if(minVal > a)
minVal = a;
if(maxVal < a)
maxVal = a;
}
//int result = (max - K) - (min + K);
return max(0, maxVal - minVal - K * 2);
}
};