题:https://leetcode.com/problems/merge-intervals/description/
题目
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]
.
题目
线性扫描,将前一个 Interval的end值 与后一个 Interval的start值对比,若end值较大。合并两个区间修改middle。否则,将start-middle 区间存入。
Code C++
/**
* 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 comparefunc (const Interval& a, const Interval& b) {
return a.start < b.start;
}
vector<Interval> merge(vector<Interval>& intervals) {
vector<Interval> ivec;
if(intervals.size()==0) return ivec;
sort (intervals.begin(), intervals.end(), comparefunc);
int left = intervals[0].start;
int middle = intervals[0].end;
for(int i =1;i<intervals.size();i++){
if(middle>=intervals[i].start){
if(middle<intervals[i].end){
middle = intervals[i].end;
}
}
else{
Interval *tmp = new Interval(left,middle);
ivec.push_back(*tmp);
left = intervals[i].start;
middle = intervals[i].end;
}
}
Interval *tmp = new Interval(left,middle);
ivec.push_back(*tmp);
return ivec;
}
};