class Solution:
def eatenApples(self, apples: List[int], days: List[int]) -> int:
ans = 0
pq = []
i = 0
# 第一阶段还在产苹果
while i < len(apples):
while pq and pq[0][0] <= i:
heappop(pq)
# 如果树上长苹果了
if apples[i]:
heappush(pq, [i + days[i], apples[i]])
if pq:
# 当天吃掉一个苹果
pq[0][1] -= 1
if pq[0][1] == 0:
heappop(pq)
ans += 1
i += 1
# 第二阶段不产苹果了
while pq:
while pq and pq[0][0] <= i:
heappop(pq)
if len(pq) == 0:
break
p = heappop(pq)
# 过期时间和苹果数量的较小值,省了几步
num = min(p[0] - i, p[1])
ans += num
i += num
return ans
LeetCode 1705 吃苹果的最大数目
最新推荐文章于 2025-12-10 14:25:37 发布
本文介绍了一种算法,通过优先级队列管理,解决如何在给定苹果产量和生长周期的情况下,最大化利用苹果。它分为两个阶段,一是产果期间按天食用,二是果树不再产果时处理剩余。策略核心在于动态调整食用顺序和数量。
3264

被折叠的 条评论
为什么被折叠?



