作者oin1104 (是oin的說)
標題Re: [閒聊] 每日leetcode
時間2024-10-11 15:09:53
題目:
給你times陣列
裡面有一堆idx當編號的邊版人
還有到達跟離開的時間
在無限多張文盲號碼中
每個到達的人
都會先跟愛蜜莉雅領取前面編號的號碼牌
等到他們受不了之後
他們會把號碼牌歸還給愛蜜莉雅
idx編號是第target個的人是ZIDENS
請問ZIDENS是第幾號文盲
思路:
先到先跑的題目都用queue
由於要用time來比較 而且要看他們的idx
所以用pq<pii>賽他們的資訊
直接模擬
放一堆號碼牌
讓一堆人排隊
每個排隊的人都看看過來在他之前會離開的人
讓他們離開 並且把號碼牌拿回來
然後再讓這個人拿號碼牌
順便看他是不是立丹
```cpp
class Solution {
public:
int smallestChair(vector<vector<int>>& times, int targetFriend)
{
int n = times.size();
priority_queue<int , vector<int> , greater<int>> chairs;
for (int i = 0; i <= n; i++) chairs.push(i);
//arr idx
priority_queue<pair<int,int> , vector<pair<int,int>> , greater<pair<int,
int>>> arrive_f;
//leave chair
priority_queue<pair<int,int> , vector<pair<int,int>> , greater<pair<int,
int>>> leave_f;
for(int i = 0 ; i < n ; i ++)
{
arrive_f.push({times[i][0] , i});
}
while(!arrive_f.empty())
{
pair<int,int> nowf = arrive_f.top();
arrive_f.pop();
while(!leave_f.empty() && leave_f.top().first <= nowf.first)
{
pair<int,int> leavef = leave_f.top();
leave_f.pop();
chairs.push(leavef.second);
}
int chair = chairs.top();
chairs.pop();
if(nowf.second == targetFriend)return chair;
leave_f.push({times[nowf.second][1] , chair});
}
return -1;
}
};
```
--
※ 發信站: 批踢踢實業坊(pttweb.org.tw), 來自: 101.12.19.26 (臺灣)
※ 文章網址: https://pttweb.org.tw/Marginalman/M.1728630595.A.B7F