力扣1353.最多可以参加的会议数目
力扣1353.最多可以参加的会议数目
-
优先队列
- 枚举时间i在i时刻仍开展的会议中选结束时间最近的那个
- 优先队列存每天进行的会议
-
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; } };