908. Smallest Range I(最小差值 I)
程序员文章站
2022-04-02 21:21:22
...
908. 最小差值 I
给定一个整数数组
A
,对于每个整数A[i]
,我们可以选择任意x
满足-K <= x <= K
,并将x
加到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]
提示:
1 <= A.length <= 10000
0 <= A[i] <= 10000
0 <= K <= 10000
解法一
//时间复杂度O(n), 空间复杂度O(1)
class Solution {
public:
int smallestRangeI(vector<int>& A, int K) {
int n = A.size();
int maxV = A[0];
int minV = maxV;
for(int i = 1; i < n; i++) {
maxV = max(A[i], maxV);
minV = min(A[i], minV);
}
return max(0, maxV - minV - 2 * K);
}
};
思路:
题目表述有点晦涩,翻译成简单的语言就是:
给出一个数组A,和一个数K。可以对A的每个元素进行加减x操作(要求x位于正负K之间),求操作后的数组A最大最小值之差的最小值是多少。
思路也很简单,只要求出数组的最大值maxV和最小值minV,用两者之差减去两倍的K(小于0则取0),就是答案。
2019/08/3 23:35
下一篇: Leetcode学习:五大算法之回溯算法