题目描述:

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;
    }

 

相关文章:

  • 2022-01-10
  • 2021-08-07
  • 2021-07-09
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-01-09
  • 2021-06-11
  • 2022-02-14
  • 2021-07-26
  • 2022-12-23
  • 2021-08-19
  • 2021-09-08
相关资源
相似解决方案