30. Insert Interval【LintCode by java】

來源:互聯網
上載者:User

標籤:eval   style   last   desc   get   order   inline   insert   turn   

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】

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.