56. 合并区间
双指针,先按照左端点升序排序,对于一个区间,如果可以和后面的合并,则其右端点一定大于后面区间的左端点,且合并后的区间右端点要取两个区间大的右端点,取max,注意边界即可 vector<vector<int>>默认按照第一列的元素从小到大排序,注意如果这里加cmp函数,必须是静态函数,因为sort是全局函数,全局函数不能调用类的成员函数
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 29 30
| class Solution { public: vector<vector<int>> merge(vector<vector<int>>& intervals) { int n = intervals.size(); sort(intervals.begin(), intervals.end()); vector<vector<int>> res; int i = 0, j = 1, mx = intervals[0][1]; while(j < n) { if(intervals[j][0] <= mx) { mx = max(mx, intervals[j][1]); j ++; } else { res.push_back({ intervals[i][0], mx}); i = j; j = i + 1; mx = intervals[i][1]; } } res.push_back({ intervals[i][0], mx}); return res; } };
|