题解
双指针
需要把区间先排一下序
左指针指向区间最左边的位置,右指针指向区间最右边的位置,t 来控制上个区间最右边的位置
如果下个区间可以和上个之前的合并,那么进行更新,知道到这个位置没有可以合并的区间为止,之后更新左指针继续进行看这个区间可以合并的最大范围。
如果不理解的可以先看一遍代码
欢迎指正和提问~
代码
class Solution {
public:
vector<vector<int>> merge(vector<vector<int>>& intervals) {
sort(intervals.begin(),intervals.end());
vector<vector<int>> ans;
for(int i = 0; i < intervals.size();){
int t = intervals[i][1];
int j = i+1;
while(j < intervals.size() && intervals[j][0] <= t){//如果左点包含在之前的一个区间之内
t = max(t,intervals[j][1]);
j++; //看有没有可以继续合并的位置
}
ans.push_back({intervals[i][0],t});
i = j;
}
return ans;
}
};