哎,这个合并区间就是咋说呢,左+右对吧?就反正一个左一定要和一个右配对,那就简单了。反正pair排序,按照first排序之后,这个second来看,如果你这个second能比下一个first大,那就能合并,不然就push
非常简单的模拟的思路,nlogn

具体写就sort一下begin end,加一个lambda [](&a, &b)
然后就开始写区间,这个区间开头是l,r就0那个左右
然后就开始更新,如果在区间内,就更新r,这个r就是当前这个两个r的max也就是当前r和这个r的最大值
如果不是合并的,那就更新了,同时push一下
然后最后剩下一组,就是更新了的最后一组/没更新的合并的,push没问题。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class Solution {
public:
vector<vector<int>> merge(vector<vector<int>>& intervals) {
sort(intervals.begin(), intervals.end(), [](vector<int>& a, vector<int>& b) {
return a[0] < b[0];
});
vector<vector<int>> res;
bool isGap = false;
int l = intervals[0][0], r = intervals[0][1];
for (int i = 0, j = i + 1; j < intervals.size(); i++, j++) {
if (intervals[j][0] <= r) {
r = max(r, intervals[j][1]);
isGap = false;
} else {
isGap = true;
vector<int> tmp;
tmp.push_back(l); tmp.push_back(r);
res.push_back(tmp);
l = intervals[j][0];
r = intervals[j][1];
}
}
vector<int> tmp;
tmp.push_back(l); tmp.push_back(r);
res.push_back(tmp);
return res;
}
};

tmp.push_back{l, r}应该也行,我不太熟c++,就这样吧,大概就行了