【LeetCode】Merge Intervals && Insert Interval
2014-05-29 14:09
351 查看
参考链接
Insert Intervalhttp://blog.csdn.net/worldwindjp/article/details/21612731
http://blog.csdn.net/littlestream9527/article/details/17686435
http://www.cnblogs.com/remlostime/archive/2012/11/25/2787387.html
题目描述
Insert Interval
Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessary).
You may assume that the intervals were initially sorted according to their start times.
Example 1:
Given intervals
[1,3],[6,9], insert and merge
[2,5]in
as
[1,5],[6,9].
Example 2:
Given
[1,2],[3,5],[6,7],[8,10],[12,16], insert and merge
[4,9]in
as
[1,2],[3,10],[12,16].
This is because the new interval
[4,9]overlaps
with
[3,5],[6,7],[8,10].
Merge Intervals
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].
题目分析
Merge Intervals首先按start 排序 ,
设置一个start,end
如果 end < intervals[i].start 就可以把 (start,end),添加进去
如果 end < intervals[i].end 就把end更新为 intervals[i].end,也就是把 intervals[i]合并入(start,end)
如果 end >= intervals[i].end 说明 intervals[i] 已经在 (start,end) 不用处理
Insert Interval
方法一,把newInterval插入按start排序的位置。然后执行merge interval
方法二,找到start和end插入的位置。见代码注释
class Solution { public: vector<Interval> insert(vector<Interval> &intervals, Interval newInterval) { vector<Interval> ret; int size = intervals.size(); //TODO size 1 int i = 0; int start = 0, end = 0; for(i = 0;i<size;i++) { if(intervals[i].start> newInterval.end)//这里i后的都不用处理 break; } end = i; for(;i>=0;i--) { if(i<size && intervals[i].end < newInterval.start)//这里i之前的都不用处理 break; } start = i; for(i = 0;i<=start;i++)//start之前的肯定是和新插入的 没有交集的 { ret.push_back(intervals[i]); } if(start + 1 < size && newInterval.start > intervals[start+1].start) newInterval.start = intervals[start+1].start; if(end>0 && newInterval.end < intervals[end-1].end) newInterval.end = intervals[end-1].end; ret.push_back(newInterval); for(i = end;i<size;i++)//end之后的肯定是和新插入的 没有交集的 { ret.push_back(intervals[i]); } return ret; } };
bool comp(const Interval &a, const Interval &b) { if(a.start==b.start)return a.end<b.end; return a.start<b.start; } class Solution { public: vector<Interval> merge(vector<Interval> &intervals) { vector<Interval> ret; int size = intervals.size(); sort(intervals.begin(),intervals.end(),comp); if(size < 1) return ret; int start = intervals[0].start; int end = intervals[0].end; for(int i = 1;i<size;i++) { if(end < intervals[i].start) { ret.push_back(Interval(start,end)); start = intervals[i].start; end = intervals[i].end; } if(end < intervals[i].end) end = intervals[i].end; } ret.push_back(Interval(start,end)); return ret; } };
推荐学习C++的资料
C++标准函数库http://download.csdn.net/detail/chinasnowwolf/7108919
在线C++API查询
http://www.cplusplus.com/
相关文章推荐
- 【题解】【区间】【二分查找】【Leetcode】Insert Interval & Merge Intervals
- [LeetCode]Merge Intervals && Insert Interval
- 【LeetCode】Merge Intervals && Insert Interval
- leetcode56&57_Merge Intervals&Insert Interval
- 56-Merge Intervals && 57-Insert Interval
- Merge Intervals && Insert Interval
- Merge Intervals & Insert Interval
- Insert Interval & Merge Intervals
- Merge Intervals And Insert Interval -- Leetcode
- Merge Intervals & Insert Interval
- leetcode-56&88 Merge Intervals && Merge Sorted Array
- Leetcode 56. Merge Intervals && 57. Insert Interval(Hard)
- [LeetCode] Merge Interval系列,题:Insert Interval,Merge Intervals
- LeetCode解题报告—— Jump Game & Merge Intervals & Permutation Sequence
- LeetCode: Insert Interval & Merge Interval
- Leetcode 56. Merge Intervals & 57. Insert Interval
- Leetcode: Merge/Insert Interval
- [LeetCode] Merge Intervals、Insert Interval:
- leetcode_question_57 Insert Interval
- LeetCode_Insert Interval