假设我们有一个二维的间隔列表,其中每个间隔都有两个值[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