题目
思路
这道题的总体思路为贪心,为了尽可能的“节省”现存的苹果,需要优先吃掉最早可能坏掉的,即优先吃掉坏掉天数最小的苹果,因此需要有一个数据结构能够存储当前坏掉天数最小的苹果。可以使用Python的heap库中的相关方法,将列表变成最小堆。堆中的元素为列表或元祖,其中过期的天数是第一位元素,苹果数量是第二位元素。循环的条件为列表不为空或者天数在题干所给天数范围内,在每次循环时要先弹出已经过期的栈顶元素,然后如果天数在题干所给天数范围内的话且对应的苹果数量不为0则将对应的元素入栈。当前堆不为空的话则可以吃掉一个苹果,答案加1。如果最小堆中的元素为列表的话,则当其记录的苹果数目变为0时将其弹出栈。重复这个过程直到循环结束。
代码
class Solution:
def eatenApples(self, apples: List[int], days: List[int]) -> int:
n=len(apples)
q=[]
ans=0
i=0
while len(q) or i<n:
# print(q)
if len(q):
while len(q) and q[0][0]<=i:
heapq.heappop(q)
if i<n:
if apples[i]:
heapq.heappush(q,[i+days[i],apples[i]])
if len(q):
q[0][1]-=1
if not q[0][1]:
heapq.heappop(q)
ans+=1
i+=1
return ans