題目連接: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 }