Given a collection of intervals, merge all overlapping intervals.
For example,
Given [1,3],[2,6],[8,10],[15,18]
,
return [1,6],[8,10],[15,18]
.
1.我的解法 很简单 就一个个放到res里面,然后遍历每个元素,将每个元素与res里面的合并
/**
* Definition for an interval.
* struct Interval {
* int start;
* int end;
* Interval() : start(0), end(0) {}
* Interval(int s, int e) : start(s), end(e) {}
* };
*/
class Solution {
public:
static bool comp(Interval a, Interval b){
if(a.start != b.start)
return a.start < b.start;
else
return a.end < b.end;
}
vector<Interval> merge(vector<Interval>& intervals) {
vector<Interval>res;
int n = intervals.size();
if(n == 0) return res;
sort(intervals.begin(), intervals.end(), comp);
res.push_back(intervals[0]);
for(int i = 1; i < n; i++){
for(int j = 0; j < res.size(); j++){
if(intervals[i].start > res[j].end){
if(j < res.size()-1) //如果要插入的元素的开始比res[j]的结尾要大,则跳过;
continue;
else
res.push_back(intervals[i]);//如果此时比较的是res中的最后一个,则插入res中
}else{ //如果要插入的元素的开头比res[j]的end要小,则找到了要合并的区间,就把两者合并同时删除res[j]并加入新区间
int left = res[j].start;
int right = res[j].end;
left = min(left, intervals[i].start);
right = max(right, intervals[i].end);
Interval t;
t.start = left;
t.end = right;
res.erase(res.begin()+j);
res.push_back(t);
}
break;
}
}
return res;
}
};