57.Insert Interval

題目連接:https://leetcode.com/problems/insert-interval/description/ide

題目大意:給處一個list,裏面是按start排好序的非重疊區間,插入一個區間,將重疊區間合併。可見56題。spa

法一(借鑑):不用排序直接比較更新。因爲初始就是排好序的非重疊區間,因此直接用newInterval與原始list中的區間進行比較便可,若是有重疊則更新newInterval。代碼以下(耗時16ms):code

 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
相關文章
相關標籤/搜索