码迷,mamicode.com
首页 > 其他好文 > 详细

253. Meeting Rooms II

时间:2017-02-03 14:39:04      阅读:270      评论:0      收藏:0      [点我收藏+]

标签:example   ons   ini   优先   i++   定义排序   com   off   部分   

Given an array of meeting time intervals consisting of start and end times [[s1,e1],[s2,e2],...] (si < ei), find the minimum number of conference rooms required.

For example,
Given [[0, 30],[5, 10],[15, 20]],
return 2.

此题非常经典,用了两种自定义排序,第一种是将原来数组按照start从小到大排列。第二种设置一个优先队列按照end从小到大进行排序。将排好序的数组的第一个元素插入优先队列中。将优先队列中的元素的end和数组后面的元素start进行比较,如果有重叠部分,则将数组后面的元素插入优先队列中,然后原优先队列中的元素也插入进去,接下来不断进行比较即可,如果没有重叠部分后将下一个元素的end值赋值给优先队列中的poll出来的第一个元素,代码如下:

/**

 * 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 int minMeetingRooms(Interval[] intervals) {

        if(intervals.length==0) return 0;

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

            public int compare(Interval a,Interval b){

                return a.end-b.end;

            }

        });

        Arrays.sort(intervals,new Comparator<Interval>(){

            public int compare(Interval a,Interval b){

                return a.start-b.start;

            }

        });

        q.offer(intervals[0]);

        for(int i=1;i<intervals.length;i++){

            Interval cur = q.poll();

            if(intervals[i].start<cur.end){

                q.offer(intervals[i]);

            }else{

                cur.end = intervals[i].end;

            }

            q.offer(cur);

        }

        return q.size();

    }

}

253. Meeting Rooms II

标签:example   ons   ini   优先   i++   定义排序   com   off   部分   

原文地址:http://www.cnblogs.com/codeskiller/p/6362537.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!