1705. 吃苹果的最大数目

exiaohu 于 2021-12-24 发布

题目链接: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