1 题目
![](https://img-blog.csdnimg.cn/4d3eaf6af59741d3898341fa48f98213.png)
2 思路
- 排序:所有数组按照第一个数字从小到大排序。如果第一个数字相同,就以第二个数字从小到大为标准排序。
- 使用curr存储当前的重叠区间,初始化为intervals[0]
- 从1开始遍历intervals
- 如果当前数组与curr有重叠,就合并。
- 如果没有重叠,就把curr加到答案里,将curr清空,更新为新的区间。
- 遍历结束后记得检查curr是否为空,如果不为空,需要push。
3 AC代码
bool cmp(const vector<int> &l,const vector<int> &r){
if(l[0]<r[0])
return true;
if(l[0]>r[0])
return false;
if(l[1]<r[1])
return true;
return false;
}
class Solution {
public:
vector<vector<int>> merge(vector<vector<int>>& intervals) {
vector<vector<int>> ans;
sort(intervals.begin(),intervals.end(),cmp);
vector<int> curr=intervals[0];
for(int i=1;i<intervals.size();i++){
if(intervals[i][0]<=curr[1]){
curr[1]=max(intervals[i][1],curr[1]);
}
else{
ans.push_back(curr);
curr.clear();
curr.push_back(intervals[i][0]);
curr.push_back(intervals[i][1]);
}
}
if(!curr.empty()){
ans.push_back(curr);
curr.clear();
}
return ans;
}
};