[LeetCode] 253. 会议室 II

Description

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

Example

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

Analysis

1、模拟
用优先队列维护每个会议室的结束时间,每次与最小的结束时间进行比较,更新最小结束时间或创建新的会议室
2、上下车
类似于公交车上下车,开始时间+1,结束时间-1,记录中间过程最大的值

Code

优先队列

static bool cmp(const vector<int> &a, const vector<int> &b) {
        if(a[0] == b[0]) return a[1] < b[1]; 
        return a[0] < b[0];
    }
    int minMeetingRooms(vector<vector<int>>& intervals) {
        sort(intervals.begin(), intervals.end(), cmp);
        priority_queue<int, vector<int>, greater<int>> q;
        int ans = 1;
        q.push(intervals[0][1]);
        for(int i = 1;i < intervals.size();i++) {
            if(intervals[i][0] >= q.top()) {
                q.pop();q.push(intervals[i][1]);
            } else {
                q.push(intervals[i][1]);
            }
        }
        return q.size();
    }

上下车

int minMeetingRooms(vector<vector<int>>& intervals) {
        vector<pair<int,int>> v;
        for(auto i : intervals) {
            v.push_back(make_pair(i[0], 1));
            v.push_back(make_pair(i[1], -1));
        }
        sort(v.begin(), v.end());
        int ans = 0, c = 0;
        for(auto i : v) {
            c += i.second;
            ans = max(ans, c);
        }
        return ans;
    }
posted @ 2022-06-25 11:49  Zforw  阅读(282)  评论(0编辑  收藏  举报