思路:先对区间进行排序,按照起始点进行升序排列,然后使用贪心算法,对于目前的区间[start, end],找到下一个区间[start_i, end_i] ,因为已经排好序了,所以,start_i >= start,只考虑与end的比较,如果start_i <end 说明区间有重合,可以合并,如果start_i > end说明与当前区间没有交集,将当前区间存入解向量中,继续后面的搜索。
code:
bool cmp(const Interval &A, const Interval &B ){
return A.start < B.start;
}
class Solution {
public:
vector<Interval> merge(vector<Interval> &intervals) {
vector<Interval> ret;
if(intervals.empty())return ret;
sort(intervals.begin(),intervals.end(),cmp);
Interval curInter = intervals[0];
for(int i=1;i<intervals.size();i++){
if(intervals[i].start <= curInter.end)
curInter.end = max(curInter.end,intervals[i].end);
else{
ret.push_back(curInter);
curInter = intervals[i];
}
}
ret.push_back(curInter);
return ret;
}
};