假设我们有一个称为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