本题事实上没有“高级的”贪心法。所有o(N)时间的算法都是不正确。
比较暴力的贪心其实很容易想到:优先吃离腐败日期最近的苹果,先解决燃眉之急。数据结构选用优先队列或者其他heap。我们每一天的流程是这样的:
- 如果队列里有今天过期的苹果,扔掉。
- 如果今天有新长出来的苹果,加入队列。
- 取队列最上方的一批苹果,吃掉其中的一个;剩下的再放回队列。
时间复杂度是o(NlogN),其中N是天数。最多我们会遍历多少天呢?极限情况是:最后一天遇上了保质期最长的苹果,N最大是2e4+2e4.所以o(NlogN)是可以接受的。