15.4 Merge Intervals

来源:互联网 发布:淘宝抢购用什么浏览器 编辑:程序博客网 时间:2024/05/12 10:36

Link: https://oj.leetcode.com/problems/merge-intervals/

Approach I: Dai's code

把15.3 Insert Interval 作为子操作(Code Ganker认为本题是Insert Interval的子操作, 为什么不同?)@8.31.2014

Time: O(n1+n2+...), //我认为= O(1+2+3+...+n) = O(n^2)

Space: O(1)

public class Solution {    //use insert intervals    public ArrayList<Interval> merge(ArrayList<Interval> intervals) {        ArrayList<Interval> result = new ArrayList<Interval>();        for(int i = 0; i < intervals.size(); i++){            insertIntervals(result, intervals.get(i));        }        return result;    }        public void insertIntervals(ArrayList<Interval> intervals, Interval interval){        ListIterator<Interval> it = intervals.listIterator();        while(it.hasNext()){            Interval cur = it.next();            if(interval.end < cur.start){                it.previous();                it.add(interval);//does this equal to intervals.add(interval)?@8.31.2014                return;            }            else if (interval.start > cur.end){                continue;            }            else{                interval.start = Math.min(interval.start, cur.start);                interval.end = Math.max(interval.end, cur.end);                it.remove();            }        }        intervals.add(interval);    }}

问题:不懂iterator.add(interval) 和intervals.add(interval)有什么区别?@8.31.2014



Approach II: Only compare each interval in the list, with the last one in result list. 

Time: O(nlogn + n) = O(nlogn), Space: O(1)

http://blog.csdn.net/linhuanmars/article/details/21857617

public class Solution {    //code ganker: http://blog.csdn.net/linhuanmars/article/details/21857617    public ArrayList<Interval> merge(ArrayList<Interval> intervals) {        if(intervals == null || intervals.size() == 0) return intervals;        ArrayList<Interval> result = new ArrayList<Interval>();        Comparator<Interval> comp = new Comparator<Interval>(){            @Override            public int compare(Interval i1, Interval i2){                if(i1.start == i2.start){                    return i1.end - i2.end;                }                else return i1.start - i2.start;            }        };        Collections.sort(intervals, comp);        result.add(intervals.get(0));        for(int i = 1; i < intervals.size(); i++){            Interval last = result.get(result.size()-1);            if(last.end >= intervals.get(i).start){                last.end = Math.max(last.end, intervals.get(i).end);            }            else{                result.add(intervals.get(i));            }        }        return result;    }}


0 0
原创粉丝点击