• b_lc_最小未被占据椅子的编号(记录每个时间来的人 + pq)


    有 n 个人,0 到 n - 1 编号。有 无数 张椅子,编号为 0 到 infinity 。
    当一个朋友到达派对时,他会占据 编号最小 且未被占据的椅子。

    当一个朋友离开派对时,他的椅子会立刻变成未占据状态。
    如果同一时刻有另一个朋友到达,可以立即占据这张椅子。

    给你一个下标从 0 开始的二维整数数组 times ,
    其中 times[i] = [arrivali, leavingi] 表示第 i 个朋友到达和离开的时刻,
    同时给你一个整数 targetFriend 。所有到达时间 互不相同 。

    请你返回编号为 targetFriend 的朋友占据的 椅子编号 。
    n <= 1e5,times[i][0] <= 1e5

    思路:先存储每个时间到来、离去的人的编号。然后在遍历每个时间点之前,我先将所有离去的人的作为先加到队列里面,然后在处理坐下的逻辑,这样会将问题简化到最简单

    
    const int N = 1e5 + 5;
    class Solution {
    public:
        int smallestChair(vector<vector<int>>& times, int tar) {
            int n = times.size();
            priority_queue<int, vector<int>, greater<int>> free;
            for (int i = 0; i < N; i++) {
                free.push(i);
            }
            vector<vector<int>> came(N), left(N);
            for (int i = 0; i < n; i++) {
                came[times[i][0]].push_back(i);
                left[times[i][1]].push_back(i);
            }
    
            unordered_map<int, int> mp;
            for (int i = 1; i < N; i++) {
                for (int j : left[i]) {
                    free.push(mp[j]);
                }   
                for (int j : came[i]) {
                    mp[j] = free.top();
                    free.pop();
                }
            }
            return mp[tar];
        }
    };
    
  • 相关阅读:
    HTML5 图片预览
    ubuntu JAVA 安装
    跟着老猫来搞GO内建容器Map
    面试造火箭系列,栽在了cglib和jdk动态代理
    跟着老猫来搞GO,"面向对象"
    跟着老猫来搞GO内建容器slice
    跟着老猫来搞GO,基础进阶
    JavaScript中利用doucument.writeline()方法预生成代码的小技巧
    javascript学习记录
    你的逻辑性强吗?
  • 原文地址:https://www.cnblogs.com/wdt1/p/15056806.html
Copyright © 2020-2023  润新知