C++ 中的最小范围 II
假设我们有一个整数数组 A,对于每个整数 A[i],我们必须选择 x = -K 或 x = K,并将 x 添加到 A[i](仅一次)。因此,在此过程之后,我们得到一个数组 B。我们必须找出 B 的最大值和 B 的最小值之间的最小可能差值。因此,如果输入是 A = [0,10],K = 2,那么输出为 6,因为 B = [2,8]。
为解决此问题,我们将遵循以下步骤 -
设置 ret := 0,n := 数组 A 的大小
对数组 A 进行排序
设置 ret := A 的最后一个元素 - A 的第一个元素
right := A 的最后一个元素 - K 和 left := A 的第一个元素 + k
对于 i 在 0 到 n - 1 之间的范围
mx := A[i] + k 和 right 的最大值
mn := A[i + 1] - k 和 left 的最小值
ret := ret 和 (mx - min) 的最小值
返回 ret
让我们看看以下实现以获得更好的理解 -
示例
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int smallestRangeII(vector<int>& A, int k) {
int ret = 0;
int n = A.size();
sort(A.begin(), A.end());
ret = A[n - 1] - A[0];
int mx, mn;
int right = A[n - 1] - k;
int left = A[0] + k;
for(int i = 0; i < n - 1; i++){
mx = max(A[i] + k, right);
mn = min(A[i + 1] - k, left);
ret = min(ret, mx - mn);
}
return ret;
}
};
main(){
vector<int> v = {0, 10};
Solution ob;
cout << (ob.smallestRangeII(v, 2));
}输入
[0,10] 2
输出
6
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP