leetcode56. Merge Intervals

来源:互联网 发布:qt保存数据到文件 编辑:程序博客网 时间:2024/06/06 10:39

56. Merge Intervals

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对每个区间进行排序,当下一个区间的start小于上一个区间的end时,两个区间进行合并,end取两个区间的end最大值,直到下一个区间的start比上一个区间的end大时,输出上述合并的区间。如果下一个区间的start比上一个区间的end大时,更新start和end,继续遍历下去。

/** * 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> ret = new ArrayList<Interval>();        if (intervals == null || intervals.size() <= 1) {            return intervals;        }        Collections.sort(intervals, new Comparator<Interval>() {            @Override            public int compare(Interval o1, Interval o2) {                return o1.start - o2.start;            }        });        int start = intervals.get(0).start;        int end = intervals.get(0).end;        for (int i = 1; i < intervals.size(); i++) {            Interval interval = intervals.get(i);            if (interval.start <= end) {                end = Math.max(interval.end, end);            } else {                ret.add(new Interval(start, end));                start = interval.start;                end = interval.end;            }        }        ret.add(new Interval(start, end));        return ret;    }}

这里写图片描述

1 0
原创粉丝点击