LeetCode Insert Interval
来源:互联网 发布:简单的平面设计软件 编辑:程序博客网 时间:2024/06/06 03:22
题目
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]
.
将区间插入已经排序好的区间。
从头开始向后扫描:
1、如果不重叠,且排序好的区间小于要插入的区间,将原区间插入结果;
2、如果重叠,合并,作为新的要插入的区间;
3、如果不重叠,且排序好的区间大于要插入的区间,在结果中插入要插入的区间,后面所有的区间;
二分查找的思路:
如果数据量较大,原数据可以较快地修改,删除,插入。
可以使用二分查找,分别找出要插入的头在原区间头的位置,要插入的尾在原区间尾的位置。
比较前后两个位置各自前后的两个区间,可以确定合并情况。
然后将要合并的区间合并即可得到结果。
代码:线性查找
/** * 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) { vector<Interval> ans;int len=intervals.size(),i;for(i=0;i<len;i++)//扫描{if(newInterval.start>intervals[i].end)//不重叠,且大于目前区间,压入目前区间ans.push_back(intervals[i]);else if(newInterval.end>=intervals[i].start)//重叠,合并{newInterval.start=min(newInterval.start,intervals[i].start);newInterval.end=max(newInterval.end,intervals[i].end);}else//不重叠,小于当前区间,压入插入区间和后面的区间{ans.push_back(newInterval);while(i<len){ans.push_back(intervals[i]);i++;}}}if(i==len)//没有压入新区间则压入ans.push_back(newInterval);return ans; }};
- LeetCode: Insert Interval & Merge Interval
- LeetCode题目 Insert Interval
- LeetCode: Insert Interval
- LeetCode Insert Interval
- LeetCode: Insert Interval
- Leetcode: Insert Interval
- [LeetCode] Insert Interval
- LeetCode Insert Interval
- [LeetCode]Insert Interval
- leetcode insert interval
- [leetcode]Insert Interval
- LeetCode-Insert Interval
- [leetcode] Insert Interval
- LeetCode - Insert Interval
- 【leetcode】Insert Interval
- leetcode Insert Interval
- 【leetcode】Insert Interval
- LeetCode Insert Interval
- VxWorks任务调度与中断
- 1001. 害死人不偿命的(3n+1)猜想 (15)
- iOS下的Notification的使用
- server at localhost was unable to start within 45 seconds的解决办法
- poj 2251 Dungeon Master
- LeetCode Insert Interval
- 4.2 ForkJoin_拆分任务
- Listener实践
- 河北拓睿网络科技有限公司
- 青岛城乡客运一体化 市区校车智能系统加强
- nrpe
- mybatis入门学习
- leetcode 75 Combinations
- iOS7: 那些容易被忽视的新特性