哎,这个合并区间就是咋说呢,左+右对吧?就反正一个左一定要和一个右配对,那就简单了。反正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++,就这样吧,大概就行了