1353. 最多可以参加的会议数目

Posted lgz0921

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1353. 最多可以参加的会议数目相关的知识,希望对你有一定的参考价值。

链接:https://leetcode-cn.com/problems/maximum-number-of-events-that-can-be-attended/

思路:按照开始时间排序,然后从第一天开始循环遍历,把开始时间小于等于nowDay的结束时间放入优先队列中(小于等于nowDay说明有机会参加但是不一定能参加),优先队列是一个小顶堆,最上面是结束时间最早的那个,然后poll掉这个result++,最后天数后移一天nowDay++

上代码:

java实现:

class Solution {
    public int maxEvents(int[][] events) {
        Arrays.sort(events, Comparator.comparing(x -> x[0]));
        PriorityQueue<Integer> pQ = new PriorityQueue<>();
        int result = 0, nowDay = 1, i = 0;
        while (i < events.length || !pQ.isEmpty()) {
            while (!pQ.isEmpty() && pQ.peek() < nowDay) {
                pQ.poll();
            }
            while (i < events.length && events[i][0] <= nowDay){
                pQ.add(events[i++][1]);
            }
            if(!pQ.isEmpty()){
                pQ.poll();
                result++;
            }
            nowDay++;
        }
        return result;
    }
}

kotlin实现:

class Solution {
    fun maxEvents(events: Array<IntArray>): Int {
        events.sortBy { it[0] }
        val pQ = PriorityQueue<Int>()
        var result = 0
        var nowDay = 1
        var i = 0
        while (i < events.size || !pQ.isEmpty()){
            while (!pQ.isEmpty() && pQ.peek() < nowDay){
                pQ.poll()
            }
            while (i < events.size && events[i][0] <= nowDay ){
                pQ.add(events[i++][1])
            }
            if(!pQ.isEmpty()){
                pQ.poll()
                result++
            }
            nowDay++
        }
        return result
    }
}

 

以上是关于1353. 最多可以参加的会议数目的主要内容,如果未能解决你的问题,请参考以下文章

C语言刷leetcode——贪心

LeetCode 2127. 参加会议的最多员工数

SQL查找一起参加会议最多的两个人

[M扫描] lc5805. 最小未被占据椅子的编号(顺序扫描+双周赛57_2)

5970. 参加会议的最多员工数(基环树)

86双周t4 6143. 预算内的最多机器人数目 周赛309 t4 6170. 会议室 III