明显的贪心,把区间从小到大排序之后,发生的越早的、持续时间越短的会议越优先参加。
需要记录一下当前available的最早的天数(cur_s
)。
比如:[1, 2], [1, 4], [2, 2], [3, 3], [5, 6]
的情况
我们决定在第一天参加[1, 2]
之后,cur_s
就变成了2。
需要注意的是: 这时候在第2天才开始的会议就要加在一起讨论了!而那些在第1天开始的会议已经等价于在第2天才开始了(因为第1天已经被用了),也就是说,我们需要比较[2, 4]
(原[1, 4]
)和[2, 2]
参加哪个。那显然end day越小的越先参加,因此我们需要用堆来维护当前最小的end day。
from heapq import heappush, heappop
class Solution:
def maxEvents(self, events: List[List[int]]) -> int:
events = list(sorted(events))
# print(events)
cnt, cur_s = 0, 1
q = []
for s, e in events:
while q and cur_s < s:
v = heappop(q)
if v >= cur_s:
cnt += 1
# print([cur_s, v])
cur_s += 1
heappush(q, e)
cur_s = max(cur_s, s) # pay attention!
while q:
v = heappop(q)
if v >= cur_s:
cnt += 1
# print([cur_s, v])
cur_s += 1
return cnt