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