C ++中包含一个数字的最长间隔
假设我们有一个称为nums的不同整数的列表。我们必须找到最大间隔(包括两端)[开始,结束]的大小,以使其最多包含一个以num为单位的数字。
因此,如果输入类似于nums=[10,6,20],则输出将为99990,因为最大间隔为[11,100000],因此仅包含20。
为了解决这个问题,我们将遵循以下步骤-
ret:=-inf
结束:=100000
上一页:=1
对数组数字进行排序
n:=nums的大小
对于初始化i:=0,当i<nums大小时,更新(将i增加1),执行-
低:=上一个
低:=上一页+1
高:=结束
高:=nums[i+1]-1
如果i+1<n,则-
除此以外
如果i-1>=0,则-
除此以外
上一个:=nums[i]
ret:=高-低+1的最大值并ret
返回ret
让我们看下面的实现以更好地理解-
示例
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int solve(vector<int> &nums) {
int ret = INT_MIN;
int end = 100000;
int prev = 1;
sort(nums.begin(), nums.end());
int n = nums.size();
int low, high;
for (int i = 0; i < nums.size(); i++) {
if (i + 1 < n) {
high = nums[i + 1] - 1;
} else
high = end;
if (i - 1 >= 0) {
low = prev + 1;
} else
low = prev;
prev = nums[i];
ret = max(high - low + 1, ret);
}
return ret;
}
};
main() {
Solution ob;
vector<int> v = {10, 6, 20};
cout << (ob.solve(v));
}输入项
{10, 6, 20}输出结果
99990