253. Meeting Rooms 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.
Example 1
Input: [[0, 30],[5, 10],[15, 20]]
Output: 2
Example 2
Input: [[7,10],[2,4]]
Output: 1
题意:这道题给我们了meetings的开始时间和结束时间,问至少需要多少房间才能安排下来meeting。 这个只要一条线段按时间顺序扫一遍,求出相交最多的线段就是所需要的最少的房间数目。 因为改变相交的数量的时候只能是开始时间和结束时间点。 我们可以用tree map来做,对于起始时间,映射值就自增 1。 对于结束时间就自减 1。这样就可以直接定义一个 $ret$ 变量,按照时间的顺序加上映射值,取其中最大的值就是答案。
代码
class Solution {
public int minMeetingRooms(Interval[] intervals) {
TreeMap<Integer, Integer> map = new TreeMap<>();
for(int i = 0; i < intervals.length; i++) {
int start = intervals[i].start;
if(!map.containsKey(start)) map.put(start, 0);
map.put(start, map.get(start) + 1);
int end = intervals[i].end;
if(!map.containsKey(end)) map.put(end, 0);
map.put(end, map.get(end) - 1);
}
int ret = 0;
int nums = 0;
while(!map.isEmpty()) {
nums += map.pollFirstEntry().getValue();
ret = Math.max(ret, nums);
}
return ret;
}
}