56. Merge Intervals

来源:互联网 发布:网络语碧莲是什么意思 编辑:程序博客网 时间:2024/05/18 12:01

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之间的大小关系,若不重合,则将前一个元素存起来.反之则更新当前元素的start和end值.

代码:

<span style="font-size:14px;">/** * 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> res=new ArrayList<Interval>();        if(intervals==null||intervals.size()==0)            return res;        Collections.sort(intervals,new Comparator<Interval>(){            public int compare(Interval l1,Interval l2){                return l1.start-l2.start;            }        });        int start;        for(int i=1;i<intervals.size();i++){            Interval i1=intervals.get(i-1);            Interval i2=intervals.get(i);            if(i1.end>=i2.start){                i2.start=i1.start;                if(i2.end<i1.end)                    i2.end=i1.end;            }            else                res.add(i1);        }        res.add(intervals.get(intervals.size()-1));        return res;    }}</span>


0 0
原创粉丝点击