您的位置:首页 > 其它

LeetCode 56. Merge Intervals 合并交叉区间

2018-02-17 20:27 375 查看
合并交叉的区间

这题的话,我先排序, 再去一一合并
合并原则:
如果当前区间的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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: