leetcode253 - Meeting Rooms II - medium
阿新 • • 發佈:2018-09-15
eap 會議室 就是 imu mat for 最小 con star
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
最小堆。O(nLogn), O(n)
預處理:先把interval按照interval的start從小到大排好序。開一個最小堆,使得堆頂是end最小的interval。
遍歷intervals,把當前interval的start和堆頂的end對比,如果交叉,說明不能用最早結束的會議室從而要重開一個新房間,入當前,heap.size()多了1說明多一個會議室;如果不交叉,說明可以之前那個房間開會的人走了我可以直接用那個房間了,出堆頂入當前,heap.size()不變說明不用多會議室。
返回的答案也就是這個過程中heap.size()的巔峰值,打擂臺得到。
實現
/** * 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; } * } */ class Solution { public int minMeetingRooms(Interval[] intervals) { if (intervals == null|| intervals.length == 0) { return 0; } Arrays.sort(intervals, new Comparator<Interval>() { @Override public int compare(Interval a, Interval b) { return a.start - b.start; } }); PriorityQueue<Interval> minHeap = new PriorityQueue<>(new Comparator<Interval>() { @Override public int compare(Interval a, Interval b) { return a.end - b.end; } }); int ans = 1; minHeap.offer(intervals[0]); for (int i = 1; i < intervals.length; i++) { int earliestEnd = minHeap.peek().end; if (intervals[i].start >= earliestEnd) { minHeap.poll(); minHeap.offer(intervals[i]); } else { minHeap.offer(intervals[i]); } ans = Math.max(ans, minHeap.size()); } return ans; } }
leetcode253 - Meeting Rooms II - medium