leetcode 1353. 最多可以参加的会议数目 (贪心 + 优先队列)
题目描述:
题解:首先对会议的开始日期升序排序。之后一天一天的遍历,把会议开始日期为当天的会议的结束日期放入优先队列(小根堆)中,每天从优先队列中安排一个能够参加的会议即可。
注意两点,对会议的开始日期升序排序,是希望能够参加尽可能早的会议。将会议的截至日期放入优先队列中,是希望能够在当天安排最紧迫的任务,这也是一种贪心。
(打周赛的时候死活没想到用优先队列去处理,经验少了)
AC代码:
int maxEvents(vector<vector<int>>& events) { int Len = events.size(); sort(events.begin(),events.end()); priority_queue<int,vector<int>,greater<int>> q; int ans = 0; int line = 1; int i = 0; while(i<Len || q.size() != 0) { while(i<Len && events[i][0] == line) { q.push(events[i][1]); i++; } // 已经参加不了的 while(q.size()!=0 && q.top()<line) q.pop(); if(q.size()!=0) { ans++; q.pop(); } line++; } return ans; }