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. 最多可以参加的会议数目的主要内容,如果未能解决你的问题,请参考以下文章