Merge Intervals

来源:互联网 发布:linux网络管理命令 编辑:程序博客网 时间:2024/06/14 03:55

Q:

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].

Solution:

Using insert interval:

/** * Definition for an interval. * public class Interval { *     int start; *     int end; *     Interval() { start = 0; end = 0; } *     Interval(int s, int e) { start = s; end = e; } * } */public class Solution {    public List<Interval> merge(List<Interval> intervals) {        List<Interval> merged = new ArrayList<Interval>();        for (Interval i: intervals) {            List<Interval> list = new ArrayList<Interval>();            for (Interval j: merged) {                if (i.start > j.end)                    list.add(j);                else if (i.end < j.start) {                    list.add(i);                    i = j;                }                else                    i = new Interval(Math.min(i.start, j.start), Math.max(i.end, j.end));            }            list.add(i);            merged = new ArrayList<Interval>(list);        }        return merged;    }}

Using Comparator:

/** * Definition for an interval. * public class Interval { *     int start; *     int end; *     Interval() { start = 0; end = 0; } *     Interval(int s, int e) { start = s; end = e; } * } */public class Solution {    public List<Interval> merge(List<Interval> intervals) {        if (intervals == null || intervals.size() <= 1)            return intervals;        List<Interval> merged = new ArrayList<Interval>();        Collections.sort(intervals, new IntervalComparator());        Interval pre = intervals.get(0);        for (int i = 1; i < intervals.size(); i++) {            Interval cur = intervals.get(i);            if (cur.start > pre.end) {                merged.add(pre);                pre = cur;            }            else {                cur = new Interval(pre.start, Math.max(pre.end, cur.end));                pre = cur;            }        }        merged.add(pre);        return merged;    }        class IntervalComparator implements Comparator<Interval> {        public int compare(Interval i1, Interval i2) {            return i1.start - i2.start;        }    }}


0 0
原创粉丝点击