题目链接:1705. 吃苹果的最大数目
贪心。每天吃剩余保质期最短的苹果即可。
import heapq
from typing import List
class AppleStore(object):
def __init__(self):
self._apples = list()
def add(self, num, expire_day, day):
if num > 0 and expire_day > day:
heapq.heappush(self._apples, (expire_day, num))
def get_nearest_apples(self, day) -> (int, int):
while len(self._apples) > 0:
expire_day, num = heapq.heappop(self._apples)
if expire_day > day:
return num, expire_day
else:
return 0, 0
def empty(self) -> bool:
return len(self._apples) == 0
class Solution:
def eatenApples(self, apples: List[int], days: List[int]) -> int:
ans, stored_apples = 0, AppleStore()
for i, (a, d) in enumerate(zip(apples, days)):
stored_apples.add(a, i + d, i)
na, nd = stored_apples.get_nearest_apples(i)
if na > 0 and nd > i:
ans += 1
stored_apples.add(na - 1, nd, i)
i = len(apples) - 1
while not stored_apples.empty():
i += 1
na, nd = stored_apples.get_nearest_apples(i)
if na > 0 and nd > i:
ans += 1
stored_apples.add(na - 1, nd, i)
else:
break
return ans