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;
    }
}

Search

    Table of Contents