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

 

posted @ 2020-02-18 10:50  猪突猛进!!!  阅读(387)  评论(0编辑  收藏  举报