[LeetCode] 253. Meeting Rooms II 会议室 II
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
.
252. Meeting Rooms 的拓展,同样给一个开会的区间数组,返回最少需要的房间数。
解法1: 把区间变成2个数组:start时间数组和end时间数组,并对两个数组排序。然后一个指针遍历start数组,另一个指针指向end数组。如果start时间小于end时间,房间数就加1,start时间加1,比较并记录出现过的最多房间数。start时间大于end,则所需房间数就减1,end指针加1。
解法2:最小堆minHeap,先按start排序,然后维护一个minHeap,堆顶元素是会议结束时间最早的区间,也就是end最小。每次比较top元素的end时间和当前元素的start时间,如果end < start,说明该room可以结束接下来被当前会议区间使用。最后返回堆的大小就是所需的房间数。
面试follow up: 结果要将会议名称跟对应房间号一起返回,而不仅仅是算需要的房间数目。
Java:
- /**
- * 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 == null || intervals.length == 0) return 0;
- int min = 0; int max = 0;
- for(int i=0; i<intervals.length; i++){
- min = Math.min(min, intervals[i].start);
- max = Math.max(max, intervals[i].end);
- }
- int[] count = new int[max-min+1];
- for(int i=0; i<intervals.length; i++){
- count[intervals[i].start]++;
- count[intervals[i].end]--;
- }
- int maxroom = Integer.MIN_VALUE;
- int num = 0;
- for(int i=0; i<count.length; i++){
- num += count[i];
- maxroom = Math.max(maxroom, num);
- }
- return maxroom;
- }
- }
Java:minHeap
- public class Solution {
- public int minMeetingRooms(Interval[] intervals) {
- int n=intervals.length;
- Arrays.sort(intervals, new Comparator<Interval>(){
- public int compare(Interval a, Interval b) {
- return a.start-b.start;
- }
- });
- PriorityQueue<Integer> pq=new PriorityQueue<>();
- for (int i=0; i<n; i++) {
- if (i>0 && intervals[i].start>=pq.peek()) pq.poll();
- pq.add(intervals[i].end);
- }
- return pq.size();
- }
- }
Python:
- class Solution:
- # @param {Interval[]} intervals
- # @return {integer}
- def minMeetingRooms(self, intervals):
- starts, ends = [], []
- for i in intervals:
- starts.append(i.start)
- ends.append(i.end)
- starts.sort()
- ends.sort()
- s, e = 0, 0
- min_rooms, cnt_rooms = 0, 0
- while s < len(starts):
- if starts[s] < ends[e]:
- cnt_rooms += 1 # Acquire a room.
- # Update the min number of rooms.
- min_rooms = max(min_rooms, cnt_rooms)
- s += 1
- else:
- cnt_rooms -= 1 # Release a room.
- e += 1
- return min_rooms
C++:
- class Solution {
- public:
- int minMeetingRooms(vector<Interval>& intervals) {
- vector<int> starts, ends;
- for (const auto& i : intervals) {
- starts.emplace_back(i.start);
- ends.emplace_back(i.end);
- }
- sort(starts.begin(), starts.end());
- sort(ends.begin(), ends.end());
- int min_rooms = 0, cnt_rooms = 0;
- int s = 0, e = 0;
- while (s < starts.size()) {
- if (starts[s] < ends[e]) {
- ++cnt_rooms; // Acquire a room.
- // Update the min number of rooms.
- min_rooms = max(min_rooms, cnt_rooms);
- ++s;
- } else {
- --cnt_rooms; // Release a room.
- ++e;
- }
- }
- return min_rooms;
- }
- };
C++: minHeap
- class Solution {
- public:
- int minMeetingRooms(vector<Interval>& intervals) {
- sort(intervals.begin(), intervals.end(), [](const Interval &a, const Interval &b){return a.start < b.start;});
- priority_queue<int, vector<int>, greater<int>> q;
- for (auto a : intervals) {
- if (!q.empty() && q.top() <= a.start) q.pop();
- q.push(a.end);
- }
- return q.size();
- }
- };
类似题目:
[LeetCode] 252. Meeting Rooms 会议室
[LeetCode] 56. Merge Intervals 合并区间
All LeetCode Questions List 题目汇总
[LeetCode] 253. Meeting Rooms II 会议室 II的更多相关文章
- [LeetCode] 253. Meeting Rooms II 会议室之二
Given an array of meeting time intervals consisting of start and end times [[s1,e1],[s2,e2],...] (si ...
- [leetcode]253. Meeting Rooms II 会议室II
Given an array of meeting time intervals consisting of start and end times [[s1,e1],[s2,e2],...] (si ...
- [LeetCode#253] Meeting Rooms II
Problem: Given an array of meeting time intervals consisting of start and end times [[s1,e1],[s2,e2] ...
- LeetCode 252. Meeting Rooms (会议室)$
Given an array of meeting time intervals consisting of start and end times [[s1,e1],[s2,e2],...] (si ...
- 252. Meeting Rooms 区间会议室
[抄题]: Given an array of meeting time intervals consisting of start and end times [[s1,e1],[s2,e2],.. ...
- [LeetCode] 252. Meeting Rooms 会议室
Given an array of meeting time intervals consisting of start and end times [[s1,e1],[s2,e2],...] (si ...
- 【LeetCode】253. Meeting Rooms II 解题报告(C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 排序+堆 日期 题目地址:https://leetco ...
- 253. Meeting Rooms II 需要多少间会议室
[抄题]: Given an array of meeting time intervals consisting of start and end times [[s1,e1],[s2,e2],.. ...
- 253. Meeting Rooms II
题目: Given an array of meeting time intervals consisting of start and end times [[s1,e1],[s2,e2],...] ...
随机推荐
- Four subspaces - Prof. Strang
相应地,用映射的观点考察映射σ的kernal space与image space,得到的就是下面这张图啦 Ref: Introduction to Linear Algebra 5th Edition ...
- 洛谷 P2722 总分题解
题目描述 我们可以从几个种类中选取竞赛的题目,这里的一个"种类"是指一个竞赛题目的集合,解决集合中的题目需要相同多的时间并且能得到相同的分数.你的任务是写一个程序来告诉USACO的 ...
- Electrification Plan 最小生成树(prim+krusl+堆优化prim)
题目 题意: 无向图,给n个城市,n*n条边,每条边都有一个权值 代表修路的代价,其中有k个点有发电站,给出这k个点的编号,要每一个城市都连到发电站,问最小的修路代价. 思路: prim:把发电站之间 ...
- PHP中的分支及循环语句
这次实践的都是PHP7的语法. 感觉是以前的5差别不是那么大,只是希望越来越快吧. <?php $looking = isset($_GET['title']) || isset($_GET[' ...
- python学习类与方法的调用规则
1类方法的特点是类方法不属于任何该类的对象,只属于类本身 2类的静态方法类似于全局函数,因为静态方法既没有实例方法的self参数也没有类方法的cls参数,谁都可以调用 3.实例方法只属于实例,是实例化 ...
- Linux学习21-设置定时任务crontab
前言 做自动化测试写的脚本需设置定时任务,在指定的时间去执行,这就需要用到定时任务.之前用jenkins可以在里面设置定时任务,很好用,其实不用jenkins,在linux上也可以用crontab做个 ...
- Django REST framework 使用简记
最近在参与的项目中需要使用到dajngo REST framework工具包进行开发,之前参与的项目几乎都是清一色的使用原生的django(话说偶尔也会使用一下Flask,真心不怎么喜欢这个框架),之 ...
- spring jar包的作用
spring.jar是包含有完整发布的单个jar 包,spring.jar中包含除了spring-mock.jar里所包含的内容外其它所有jar包的内容,因为只有在开发环境下才会用到 spring-m ...
- 66、Spark Streaming:数据处理原理剖析与源码分析(block与batch关系透彻解析)
一.数据处理原理剖析 每隔我们设置的batch interval 的time,就去找ReceiverTracker,将其中的,从上次划分batch的时间,到目前为止的这个batch interval ...
- Go-Json操作
/** * @Author: jadeshu * @Description: * @File: main * @Version: 1.0.0 * @Date: 2019/11/7 2:33 */ pa ...