今天和大家聊的问题叫做 会议室II,我们先来看题面:https://leetcode-cn.com/problems/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.
给定一个会议时间安排的数组,每个会议时间都会包括开始和结束的时间 [[s1,e1],[s2,e2],…] (si < ei),为避免会议冲突,同时要考虑充分利用会议室资源,请你计算至少需要多少间会议室,才能满足这些会议安排。
示例
示例 1: 输入: [[0, 30],[5, 10],[15, 20]] 输出: 2 示例 2: 输入: [[7,10],[2,4]] 输出: 1
解题
首先进行一下排序,然后用一个小顶堆,维护当前每个会议室的结束时间,然后当一个新的时间安排出现的时候,只需要判断一下是否需要新申请一个会议室,还是继续使用之前的会议室。
class Solution { public: int minMeetingRooms(vector<vector<int>>& intervals) { sort(intervals.begin(), intervals.end(), [](const vector<int>& a, const vector<int>&b){ return a[0] < b[0]; }); priority_queue<int, vector<int>, greater<int>> heap; for (int i = 0; i < intervals.size(); i++) { if (!heap.empty() && heap.top() <= intervals[i][0]) { heap.pop(); } heap.push(intervals[i][1]); } return heap.size(); } };
好了,今天的文章就到这里,如果觉得有所收获,请顺手点个在看或者转发吧,你们的支持是我最大的动力 。