57.Insert Interval

题目链接:https://leetcode.com/problems/insert-interval/description/

题目大意:给处一个list,里面是按start排好序的非重叠区间,插入一个区间,将重叠区间合并。可见56题。

法一(借鉴):不用排序直接比较更新。由于初始就是排好序的非重叠区间,所以直接用newInterval与原始list中的区间进行比较即可,如果有重叠则更新newInterval。代码如下(耗时16ms):

 1     public List<Interval> insert(List<Interval> intervals, Interval newInterval) {
 2         LinkedList<Interval> res = new LinkedList<Interval>();
 3         int i = 0;
 4         //将所有start前未重叠部分add进res中
 5         while(i < intervals.size() && intervals.get(i).end < newInterval.start) {
 6             res.add(intervals.get(i++));
 7         }
 8         //如果有重叠部分,即intervals.get(i).start < newInterval.end时,则更新newInterval
 9         //注意这里是比较start和end,而不是end和end,因为如果比较end和end,会漏掉最后一个newInterval.end<intervals.get(i).end的区间
10         //而可以想象,只要有intervals.get(i).start < newInterval.end,则说明有区间重叠
11         while(i < intervals.size() && intervals.get(i).start < newInterval.end) {
12             newInterval = new Interval(Math.min(intervals.get(i).start, newInterval.start), Math.max(intervals.get(i++).end, newInterval.end));
13         }
14         //将更新后的newInterval加入res
15         res.add(newInterval);
16         //将end后未重叠部分add进res中,其实这里初始给出的list已经保证了每个区间都未重叠
17         while(i < intervals.size()) {
18             res.add(intervals.get(i++));
19         }
20         return res;
21     }
View Code

 

posted on 2018-03-06 11:18  二十年后20  阅读(124)  评论(0编辑  收藏  举报

导航