力扣算法篇:合并区间
合并区间:以数组intervals表示若干个区间的集合,其中单个区间为intervals[i] = [startj,endj]。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。
实例:
题解:
class Solution {
public:
vector<vector<int>> merge(vector<vector<int>>& intervals) {
//前区间右端大于后区间左端即可合并
//若只有一个区间
int n = intervals.size();
if(n == 1){
return intervals;
}
//题目描述没有排序 先排序
sort(intervals.begin(),intervals.end());
//vetcor变量保存合并的数组
vector<vector<int>> vec;
//将第一个区间加入
vec.push_back(intervals[0]);
//然后遍历
int j = 0;
for(int i = 1;i<n;i++){
if(vec[j][1]>=intervals[i][0]){
//右端取大值
vec[j][1] = max(vec[j][1],intervals[i][1]);
//继续查看是否能继续合并
}else{
//前区间没必要合并 加入下一个区间
vec.push_back(intervals[i]);
//同时将比较的区间右移
j++;
}
}
return vec;
}
};