C ++中包含的间隔

假设我们有一个二维的间隔列表,其中每个间隔都有两个值[start,end]。我们必须找出是否有一个包含另一个间隔的间隔。

因此,如果输入类似于[[2,4],[5,11],[5,9],[10,10]],则输出为true,因为[5,11]包含[5, 9]。

为了解决这个问题,我们将遵循以下步骤-

  • 对数组v排序

  • 定义一个2D阵列ret

  • 对于每个间隔v-

    • 将其插入ret的末尾

    • 返回真

    • 将其插入ret的末尾

    • 如果ret为空,则-

    • 否则,当ret的最后一个元素> = it [0]时,则-

    • 除此以外

    • 返回假

    让我们看下面的实现以更好地理解-

    示例

     现场演示

    #include <bits/stdc++.h>
    using namespace std;
    class Solution {
       public:
       bool static cmp(vector<int> &a, vector<int> &b) {
          return a[1] == b[1] ? a[0] > b[0] : a[1] < b[1];
       }
       bool solve(vector<vector<int>> &v) {
          sort(v.begin(), v.end(), cmp);
          vector<vector<int>> ret;
          for (auto &it : v) {
             if (ret.empty())
             ret.push_back(it);
             else if (ret.back()[0] >= it[0])
             return true;
             else
             ret.push_back(it);
          }
          return false;
       }
    };
    main() {
       Solution ob;
       vector<vector<int>> v = {{2,4},{5,11},{5,9},{10,10}};
       cout << (ob.solve(v));
    }

    输入值

    {{2,4},{5,11},{5,9},{10,10}}

    输出结果

    1