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 }