Insert Interval (区间的覆盖合并) 【leetcode】
2013-09-20 15:52
344 查看
题目:
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
insert and merge
as
Example 2:
Given
insert and merge
as
This is because the new interval
with
需要仔细考虑每一种情况,我用flag表示添加的新区间是否修改完成,遍历intervals的区间,intervals【i】表示当前的区间。
1)新的区间在当前区间之前,按顺序输出两个区间。
2)新的区间的前半部分在当前区间中,将新的区间的起始位置改成当前区间的起始位置,即合并两区间,继续遍历。
3)新的区间后半部分在当前区间中,输出以新区间起始,当前区间结束的区间。
4)新的区间在当前区间内,输出当前区间,直接忽略新区间别忘记标记flag。
5)新区间包含当前区间,忽略当前区间,继续遍历。
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].
需要仔细考虑每一种情况,我用flag表示添加的新区间是否修改完成,遍历intervals的区间,intervals【i】表示当前的区间。
1)新的区间在当前区间之前,按顺序输出两个区间。
2)新的区间的前半部分在当前区间中,将新的区间的起始位置改成当前区间的起始位置,即合并两区间,继续遍历。
3)新的区间后半部分在当前区间中,输出以新区间起始,当前区间结束的区间。
4)新的区间在当前区间内,输出当前区间,直接忽略新区间别忘记标记flag。
5)新区间包含当前区间,忽略当前区间,继续遍历。
/** * Definition for an interval. * struct Interval { * int start; * int end; * Interval() : start(0), end(0) {} * Interval(int s, int e) : start(s), end(e) {} * }; */ class Solution { public: vector<Interval> insert(vector<Interval> &intervals, Interval newInterval) { int len=intervals.size(),i,j; vector<Interval> result; int start=newInterval.start,end=newInterval.end; int flag=0; for(i=0;i<len;++i) { if(flag==1) { result.push_back(intervals[i]); continue; } if(end<intervals[i].start) { flag=1; result.push_back(Interval(start,end)); } if(end>=intervals[i].start&&start<=intervals[i].start) { if(end<=intervals[i].end) { result.push_back(Interval(start,intervals[i].end)); flag=1; } } else if(start>=intervals[i].start&&start<=intervals[i].end) { if(end>=intervals[i].end) start=intervals[i].start; else { flag=1; result.push_back(intervals[i]); } } else { result.push_back(intervals[i]); } } if(flag==0) { result.push_back(Interval(start,end)); return result; } return result; } };
相关文章推荐
- 区间覆盖与合并
- UESTC1546 - Bracket Sequence(区间覆盖&&区间合并)
- HDOJ 题目3397 Sequence operation(线段树区间覆盖异或合并)
- hdoj 3397 Sequence operation 【线段树区间覆盖 + 异或 + 合并】【维护延迟标记的顺序】
- 【LeetCode-面试算法经典-Java实现】【056-Merge Intervals(区间合并)】
- 合并石子 (区间覆盖DP)
- hdu 3397 Sequence operation(线段树区间覆盖,区间合并)
- LeetCode 56. Merge Intervals(合并重叠区间)
- leetcode 56 合并区间
- leetcode 56. Merge Intervals 区间合并
- leetcode—有关区间合并
- leetcode合并时间区间
- leetcode之数组类之区间类-----OJ 56/57/435/239 重叠区间个数 合并区间 插入区间 滑动窗口最大值
- leetcode 435. Non-overlapping Intervals 消除覆盖区间 + 区间排序 && 遍历
- LeetCode-Merge Intervals-合并区间
- [Leetcode] merge intervals 合并区间
- LeetCode----56. Merge Intervals(合并包含重复区间的数组)
- leetcode 合并区间
- leetcode 352. Data Stream as Disjoint Intervals 区间合并
- (Java) LeetCode 56. Merge Intervalse —— 合并区间