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;
}
};