56. Merge Intervals

来源:互联网 发布:机器人技术基础知乎 编辑:程序博客网 时间:2024/06/07 23:00

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

合并重叠的区域。思路很简单,先按照start值排序,然后再顺序合并重叠区域即可,程序如下所示:

/** * 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; } * } */class Solution {    public List<Interval> merge(List<Interval> intervals) {        List<Interval> lst = new ArrayList<>();        if (intervals.size() <= 1){            return intervals;        }        Collections.sort(intervals, new Mycomparator());        lst.add(intervals.get(0));        int size = intervals.size();        for (int i = 1; i < size; ++ i){            Interval top = lst.get(lst.size() - 1);            if (top.end < intervals.get(i).start){                lst.add(intervals.get(i));            }            else {                Interval tmp = new Interval(Math.min(top.start, intervals.get(i).start),                                             Math.max(top.end, intervals.get(i).end));                lst.remove(lst.size() - 1);                lst.add(tmp);            }        }        return lst;    }}class Mycomparator implements Comparator<Interval> {    @Override    public int compare(Interval l0, Interval l1){        return l0.start - l1.start;    }}