[LeetCode 253] Meeting Rooms II
2019-08-06 本文已影响0人
灰睛眼蓝
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.
Example 1:
Input: [[0, 30],[5, 10],[15, 20]]
Output: 2
Example 2:
Input: [[7,10],[2,4]]
Output: 1
Solution: minHeap for endPoints
https://www.youtube.com/watch?v=wB884_Os58U
image.png
class Solution {
public int minMeetingRooms(int[][] intervals) {
if (intervals == null || intervals.length == 0 || intervals[0].length == 0)
return 0;
//1. sort intervals based on start points
Arrays.sort (intervals, (int[] entry1, int[] entry2) -> (entry1[0] - entry2[0]));
//2. have a minHeap to store all endPoints which has overlapping events
// the final size of the minHeap is the number of rooms required
PriorityQueue<Integer> minHeap = new PriorityQueue<> ();
minHeap.offer (intervals[0][1]);
for (int i = 1; i < intervals.length; i++) {
if (intervals[i][0] >= minHeap.peek ()) {
minHeap.poll ();
minHeap.offer (intervals[i][1]);
} else {
minHeap.offer (intervals[i][1]);
}
}
return minHeap.size ();
}
}