力扣1353.最多可以参加的会议数目
-
优先队列
- 枚举时间i在i时刻仍开展的会议中选结束时间最近的那个
- 优先队列存每天进行的会议
cpp
class Solution {
public:
int maxEvents(vector<vector<int>>& events) {
int maxDay = 0;
unordered_map<int,vector<int>> day2days;
for(vector<int>& event : events)
{
//取最大数
if(maxDay < event[1])
maxDay = event[1];
//将每天开始的会议存下来
day2days[event[0]].push_back(event[1]);
}
int res=0;
//小根堆
priority_queue<int,vector<int>,greater<>> q;
for(int i=1;i<=maxDay;i++)
{
//能找到第i天开始的会议
if(day2days.find(i) != day2days.end())
//全部push
for(int day : day2days[i])
q.push(day);
//已经结束的pop掉
while(!q.empty() && q.top() < i)
q.pop();
//取出结束时间最近的
if(!q.empty())
{
q.pop();
res ++;
}
}
return res;
}
};