253. 会议室 II

题目描述

给你一个会议时间安排的数组 intervals ,每个会议时间都会包括开始和结束的时间 intervals[i] = [starti, endi] ,返回 所需会议室的最小数量

示例 1:

输入:intervals = [[0,30],[5,10],[15,20]]
输出:2

示例 2:

输入:intervals = [[7,10],[2,4]]
输出:1

提示:

  • 1 <= intervals.length <= 104
  • 0 <= starti < endi <= 106

解答

class Solution {
public:
    int minMeetingRooms(vector<vector<int>>& intervals) {
        // 理解为上下车问题
        // 启用时间就是上车, 停用时间就是下车
        // 车上最大人数就是房间的最小数量

        if(intervals.size() == 0)   return 0;

        vector<pair<int, int>> meetings; // 存储 {上车时间, 1}  和  {下车时间, -1}
        for(const vector<int> &interval : intervals)
        {
            meetings.push_back({interval[0], 1});
            meetings.push_back({interval[1], -1});
        }
        // 按上下车的时间排序
        sort(meetings.begin(), meetings.end());

        int cnt = 0, maxValue = 0;
        for(const pair<int, int> &meeting : meetings)
        {
            cnt += meeting.second; // 记录每个时刻同时开会的人数
            maxValue = maxValue > cnt ? maxValue : cnt;
        }
        return maxValue;
    }
};

你可能感兴趣的:(LeetCode错题集,算法,leetcode)