解题思路
1、排序,按照区间的左端点大小进行排序,使用默认排序规则即可
2、从i=0开始遍历排序后的数组,使用左指针指向区间的左端点,右指针指向右端点
3、对从i+1开始的数组,判断右指针是否会大于第j个区间的左端点,如果是,则说明可以更新右指针,直到小于第j个区间的左端点为止
4、将左指针和右指针压入结果数组ans中。
5、更新i值为j,即从断开的区间开始进行遍历
代码
class Solution {
public:
vector<vector<int>> merge(vector<vector<int>>& intervals) {
vector<vector<int>> ans;
if (intervals.size() == 0) return ans;
sort(intervals.begin(), intervals.end());//排序
for (int i = 0; i < intervals.size();) {
int pLeft = intervals[i][0];//左指针
int pRight = intervals[i][1];//右指针
int j = i + 1;
while (j < intervals.size() && pRight >= intervals[j][0]){//更新右指针
pRight = max(pRight, intervals[j][1]);
j++;
}
ans.push_back({ pLeft,pRight });//压入结果
i = j;
}
return ans;
}
};