合并交叉的区间


这题的话,我先排序, 再去一一合并

合并原则:

如果当前区间的start,   比ans中最后一个区间的 end大

        则肯定不需要合并,直接收入ans

否则

    若当前区间的end,比ans中最后一个区间的end小

           则不需要操作,因为这个区间已经被“包含”了

    否则, 将ans中最后一个区间的end修改。


/**
* Definition for an interval.
* struct Interval {
* int start;
* int end;
* Interval() : start(0), end(0) {}
* Interval(int s, int e) : start(s), end(e) {}
* };
*/

bool cmp(Interval a, Interval b){
if(a.start < b.start)
return true;
else if(a.start == b.start){
return a.end < b.end;
}
else return false;

}
class Solution {
public:
vector<Interval> merge(vector<Interval>& intervals) {
vector<Interval> ans;
if(intervals.size()==0)
return ans;
sort(intervals.begin(), intervals.end(), cmp);
ans.push_back(intervals[0]);
Interval endInter;
endInter = intervals[0];
for(int i = 1;i < intervals.size(); i++){
if(intervals[i].start > endInter.end){
ans.push_back(intervals[i]);
}else if(intervals[i].end > endInter.end){
ans.pop_back();
endInter.end = intervals[i].end;
ans.push_back(endInter);
}
endInter = ans[ans.size()-1];
}

return ans;
}
};