【会员题】253. 会议室 II

会议室II

给定一个会议时间安排的数组,每个会议时间都会包括开始和结束的时间s1,e1,s2,e2]..](si<ei) ,为避免会议冲突,同时要考虑充分
利用会议室资源,请你计算至少需要多少间会议室,才能满足这些会议安排。

示例1
输入: [[0,30],[5,10],[15,20]]
输出: 2

假设三个会议分别为ABC

0~30的时间段内开A会,那么这段时间A肯定占用一个会议室

510开B会,也占一个会议室,但是到10点就开完了。然后1520点开C会,又需要一个会议室。

在此期间,A会一直占用着一个会议室

也就是说这三个会议要正常开完,一共需要至少2个会议室

示例2
输入: [[7,10],[2,4]]
输出: 1

用一个会议室轮流开就行,因为两个会的时间没有交叉

思路

大的思路是,我们要找到时间重合的那些会议,重合的个数就是我们至少需要占用的会议室的数量

为此,我们需要将会议起始时间和结束时间取出来,然后遍历起始时间,同时与结束时间进行比较,如果结束时间大于起始时间,那么

#include <vector>
#include <algorithm>

class Solution {
public:
    int minMeetingRooms(std::vector<std::vector<int>>& intervals) {
        vector<int> start(intervals.size());//取出开始和结束时间
        vector<int> end(intervals.size());
        for(int i = 0; i < intervals.size(); ++i){
            start[i] = intervals[i][0];
            end[i] = intervals[i][1];
        }
        int end_index = 0;
        for(int i = 0; i < start.size(); ++i){//遍历start数组,比较开始时间和结束时间
            if(end[end_index] > start[i]){//显然遍历两个数组不可能使用一个指针,所以还需要一个遍历来遍历end
                res++;//结束时间比开始时间长,不管对应的是哪个会议,都需要占用一个会议室,因此计数++
            }else{
                end_index++;//否则移动end的指针,对比下一组开始时间和结束时间
            }
        }
        return res;
    }
};
posted @ 2023-09-20 19:55  dayceng  阅读(88)  评论(0编辑  收藏  举报