zoukankan      html  css  js  c++  java
  • 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];
        }
    };
    
  • 相关阅读:
    跨浏览器的事件处理程序(javascript高级程序设计第二版第十二章)
    json
    html5 本地存储Web Storage
    sicily 6497. 字符统计
    sicily 6415. linear correlation
    sicily 1154. Easy sort
    sicily 6496. 二维数组
    sicily 6423. 反向输出数字
    sicily 1636. show me the money
    sicily 1324. Score
  • 原文地址:https://www.cnblogs.com/wdt1/p/15056806.html
Copyright © 2011-2022 走看看