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;
}
};
这题的话,我先排序, 再去一一合并
合并原则:
如果当前区间的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;
}
};
相关文章推荐
- LeetCode 56. Merge Intervals 合并区间
- [LeetCode] 56. Merge Intervals 合并区间
- [LeetCode] Merge Intervals 合并区间
- Leetcode 435. Non-overlapping Intervals 无交叉覆盖区间 解题报告
- [Leetcode] merge intervals 合并区间
- leetCode 56.Merge Intervals (合并区间) 解题思路和方法
- leetcode合并时间区间
- leetcode-56 Merge Intervals 合并区间
- XXFSDDX HDU6119 区间合并模板(交叉区间去重)
- LeetCode 56. Merge Intervals (合并区间)
- leetcode—有关区间合并
- 【LeetCode-面试算法经典-Java实现】【056-Merge Intervals(区间合并)】
- 【LeetCode51-60】N皇后,和最大子串,螺旋矩阵,跳跳棋,合并区间,第K个全排列
- LeetCode----56. Merge Intervals(合并包含重复区间的数组)
- LeetCode-Merge Intervals-合并区间
- leetcode之数组类之区间类-----OJ 56/57/435/239 重叠区间个数 合并区间 插入区间 滑动窗口最大值
- LeetCode 56. Merge Intervals(合并区间)
- Insert Interval (区间的覆盖合并) 【leetcode】
- 【LeetCode-面试算法经典-Java实现】【056-Merge Intervals(区间合并)】
- [leetcode] 区间合并问题 Merge Interval