Java for LeetCode 056 Merge Intervals

來源:互聯網
上載者:User

標籤:

Given a collection of intervals, merge all overlapping intervals.

For example,
Given [1,3],[2,6],[8,10],[15,18],
return [1,6],[8,10],[15,18].

解題思路一:

用兩個指標startIndex和endIndex來維護每次添加intervals的start和end的位置,然後分類討論即可,JAVA實現如下:

public List<Interval> merge(List<Interval> intervals) {        List<Interval> list = new ArrayList<Interval>();if (intervals.size() == 0)return list;list.add(intervals.get(0));for (int i = 1; i < intervals.size(); i++) {Interval temp = intervals.get(i);int startIndex = 0, endIndex = 0;for (int j = 0; j < list.size(); j++) {if (temp.start > list.get(j).end) {startIndex += 2;endIndex += 2;continue;}if (temp.end < list.get(j).start)break;if (temp.start >= list.get(j).start)startIndex++;if (temp.end > list.get(j).end) {endIndex += 2;continue;}if (temp.end >= list.get(j).start)endIndex++;break;}if(startIndex==endIndex&&startIndex%2==0)list.add(startIndex/2,new Interval(temp.start,temp.end));else if(startIndex%2==0&&endIndex%2==0){list.get(startIndex/2).start=temp.start;list.get(startIndex/2).end=temp.end;for(int k=1;k<endIndex/2-startIndex/2;k++)list.remove(startIndex/2+1);}else if(startIndex%2==0&&endIndex%2!=0){list.get(startIndex/2).start=temp.start;list.get(startIndex/2).end=list.get(endIndex/2).end;for(int k=1;k<=endIndex/2-startIndex/2;k++)list.remove(startIndex/2+1);}else if(startIndex%2!=0&&endIndex%2==0){list.get(startIndex/2).end=temp.end;for(int k=1;k<endIndex/2-startIndex/2;k++)list.remove(startIndex/2+1);}else if(startIndex%2!=0&&endIndex%2!=0){list.get(startIndex/2).end=list.get(endIndex/2).end;for(int k=1;k<=endIndex/2-startIndex/2;k++)list.remove(startIndex/2+1);}}return list;}

 解題思路二:

首先構造一個比較子,對interval按照start進行排序,然後進行遍曆,在遍曆過程中,如果結果集合為空白或者當前interval與結果集合中的最後一個interval不重疊,那麼就直接將當前interval直接加入到結果集合中;如果發生了重疊,那麼將結果集合的最後一個interval的右端點改為當前interval的右端點,JAVA實現如下:

public List<Interval> merge(List<Interval> intervals) {        List<Interval> list = new ArrayList<Interval>();        Comparator<Interval> comparator = new Comparator<Interval>() {            @Override            public int compare(Interval o1, Interval o2) {                if (o1.start == o2.start)                    return o1.end - o2.end;                return o1.start - o2.start;            }        };        Collections.sort(intervals, comparator);        for (Interval interval : intervals)            if (list.size() == 0 || list.get(list.size() - 1).end < interval.start)                 list.add(new Interval(interval.start, interval.end));             else             list.get(list.size() - 1).end = Math.max(interval.end, list.get(list.size() - 1).end);        return list;    }

 

Java for LeetCode 056 Merge Intervals

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.