您的位置:首页 > 其它

[leedcode 56] Insert Interval

2015-07-12 23:19 417 查看
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]
.

/**
* Definition for an interval.
* public class Interval {
*     int start;
*     int end;
*     Interval() { start = 0; end = 0; }
*     Interval(int s, int e) { start = s; end = e; }
* }
*/
public class Solution {
public List<Interval> insert(List<Interval> intervals, Interval newInterval) {
//遍历intervals,并和newInterval对比:
//1 如果比newInterval小:直接加入新结果集合
//2 如果有overlap,动态改变newInterval为新的区间,继续合并
//3 如果比newInterval大:加入newInterval到新集合,然后把newInterval更新为当前对象
//解题思路:画图,先排除两种不重叠的情况,对重叠情况最后处理,
//需要注意中间值temp的变化,以及最后需要添加最后一个temp
List<Interval> res=new ArrayList<Interval>();
Interval temp=newInterval;
for(int i=0;i<intervals.size();i++){

Interval cur=intervals.get(i);
if(cur.start>temp.end){
res.add(temp);
temp=cur;
}else{
if(temp.start>cur.end){
res.add(cur);
}else{
int start=Math.min(cur.start,temp.start);
int end=Math.max(cur.end,temp.end);
Interval newInt=new Interval(start,end);
temp=newInt;
}
}

}
res.add(temp);
return res;
}
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: