首页 > 其他 > 详细

56. Merge Intervals

时间:2017-02-03 12:08:39      阅读:164      评论:0      收藏:0      [点我收藏+]

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

 本题使用小顶堆来做,将interval.start进行排序,然后取出第一个interval值,起始点设为start,终止点设为end,然后看下一个元素的起始点是否在这个start和end之间,如果在的话,就看它们的end哪个大,把大的存为end,如果起始点不在这个范围内,则把start,end存入res里面,代码如下:

/**

 * 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.size()<=1) return intervals;

        List<Interval> res = new ArrayList<>();

        PriorityQueue<Interval> q = new PriorityQueue<Interval>(intervals.size(),new Comparator<Interval>(){

            public int compare(Interval a,Interval b){

                return a.start-b.start;

            }

        });

        for(Interval i:intervals){

            q.offer(i);

        }

        Interval val = q.poll();

        int start  = val.start;

        int end = val.end;

        while(!q.isEmpty()){

            Interval i = q.poll();

            if(i.start<=end){

                end = Math.max(end,i.end);

            }else{

                res.add(new Interval(start,end));

                start = i.start;

                end = i.end;

            }

        }

        res.add(new Interval(start,end));

        return res;

    }

}

56. Merge Intervals

原文:http://www.cnblogs.com/codeskiller/p/6362250.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!