253. 会议室 II

给你一个会议时间安排的数组 intervals ,每个会议时间都会包括开始和结束的时间 intervals[i] = [starti, endi] ,为避免会议冲突,同时要考虑充分利用会议室资源,请你计算至少需要多少间会议室,才能满足这些会议安排。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/meeting-rooms-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


线段重合问题

涂色

import java.util.Map;

class Solution {
    public int minMeetingRooms(int[][] intervals) {
        int[] cnt = new int[1000001];
        for (int[] interval : intervals) {
            cnt[interval[0]]++;
            cnt[interval[1]]--;
        }
        int sum = 0;
        int ret = 0;
        for (int i = 0; i <= cnt.length; ++i) {
            sum += cnt[i];
            ret = Math.max(ret, sum);
        }
        return ret;
    }
}

优先队列

import java.util.Arrays;
import java.util.Comparator;
import java.util.Map;
import java.util.PriorityQueue;

class Solution {
    public int minMeetingRooms(int[][] intervals) {
        if (intervals == null || intervals.length == 0 || intervals[0].length == 0) {
            return 0;
        }

        PriorityQueue<Integer> queue = new PriorityQueue<Integer>(intervals.length);
        Arrays.sort(intervals,
                new Comparator<int[]>() {
                    public int compare(final int[] a, final int[] b) {
                        return a[0] - b[0];
                    }
                });
        int ret = 0;
        for (int i = 0; i < intervals.length; i++) {
            while (!queue.isEmpty() && intervals[i][0] >= queue.peek()) {
                queue.poll();
            }
            queue.offer(intervals[i][1]);
            ret = Math.max(ret, queue.size());
        }

        return ret;
    }
}
posted @ 2021-12-20 22:26  Tianyiya  阅读(37)  评论(0)    收藏  举报