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