1. 程式人生 > >30. Insert Interval【LintCode by java】

30. Insert Interval【LintCode by java】

處理 solution lap lin def 結果 兩種 ssa ram

Description

Given a non-overlapping interval list which is sorted by start point.

Insert a new interval into it, make sure the list is still in order and non-overlapping (merge intervals if necessary).

Example

Insert (2, 5) into [(1,2), (5,9)], we get [(1,9)].

Insert (3, 4) into [(1,2), (5,9)]

, we get [(1,2), (3,4), (5,9)].

題意:給定一個區間,將它插進一個有序的區間集合裏,新的區間依然要保持有序性。這就需要考慮到區間的合並問題,我們可以定義一個新的集合,來存放最後的結果。定義一個temp遊標,用一個循環從舊的集合中依次取出區間,與待插入區間進行比較。那麽如何比較呢?假定新區間的end都小於temp的start,那說明新區間比temp要小,那麽直接將新區間放進結果集合裏就行了,剩下的依次插入。不然,則說明需要進行區間的合並,具體代碼如下:

/**
 * Definition of Interval:
 * public classs Interval {
 *     int start, end;
 *     Interval(int start, int end) {
 *         this.start = start;
 *         this.end = end;
 *     }
 * }
 
*/ public class Solution { /** * @param intervals: Sorted interval list. * @param newInterval: new interval. * @return: A new interval list. */ public List<Interval> insert(List<Interval> intervals, Interval newInterval) { // write your code here //特殊情況的討論
List<Interval>ans=new ArrayList<Interval>(); if(intervals.size()==0){ ans.add(newInterval); return ans; } if(newInterval==null){ return intervals; } if(newInterval.start>intervals.get(intervals.size()-1).end){ intervals.add(newInterval); return intervals; } //一般情況的討論 Interval last=null; for(int i=0;i<intervals.size();i++){ //用不到newIneval Interval temp=intervals.get(i); if(newInterval.start>temp.end){ ans.add(temp); continue; }else{ //分兩種情況 if(newInterval.end<temp.start){ ans.add(newInterval); last=temp; }else{ int start=newInterval.start<temp.start?newInterval.start:temp.start; int end=newInterval.end<temp.end?temp.end:newInterval.end; //合並 last=new Interval(start,end); } //對剩下的進行處理 for(int j=i+1;j<intervals.size();j++){ Interval t=intervals.get(j); if(last.end<t.start){ //歸並完成 ans.add(last); last=t; }else{ //繼續歸並 last.end=last.end>t.end?last.end:t.end; } } ans.add(last); break; } } return ans; } }

30. Insert Interval【LintCode by java】