每日一题——1705. 吃苹果的最大数目

1705. 吃苹果的最大数目

有一棵特殊的苹果树,一连 n 天,每天都可以长出若干个苹果。在第 i 天,树上会长出 apples[i] 个苹果,这些苹果将会在 days[i] 天后(也就是说,第 i + days[i] 天时)腐烂,变得无法食用。也可能有那么几天,树上不会长出新的苹果,此时用 apples[i] == 0 且 days[i] == 0 表示。

你打算每天 最多 吃一个苹果来保证营养均衡。注意,你可以在这 n 天之后继续吃苹果。

给你两个长度为 n 的整数数组 days 和 apples ,返回你可以吃掉的苹果的最大数目。


大佬的做法(原链接见下)

话说关于C#的优先队列问题这个月已经是第二次了

我还是没有研究透 唉cv什么时候才会停止呢

public class Solution {
    public int EatenApples(int[] apples, int[] days) {
            int day = 0;
            int eatenApples = 0;
            //new个篮子装每天长出来的苹果 (过期日,数量)
            SortedDictionary<int, int> basket = new SortedDictionary<int, int>();
            //还没过生长周期 或者 还有可食用苹果
            while (true)
            {
                if (day <= days.Length - 1)
                {
                    if (days[day] > 0 && apples[day] > 0)
                    {
                        int overdueDay = day + days[day] - 1;//过期日
                        if (basket.ContainsKey(overdueDay))
                            basket[overdueDay] += apples[day];
                        else
                            basket.Add(overdueDay, apples[day]);
                    }
                }
                //找找是否有可食用的苹果
                if (basket.Count() > 0)
                {
                    if (--basket[basket.FirstOrDefault().Key] == 0)
                        basket.Remove(basket.FirstOrDefault().Key);
                    eatenApples++;
                }
                else if (day > days.Length)
                {
                    break;
                }
                //丢掉过期的苹果
                basket.Remove(day);
                day++;
            }

            return eatenApples;
    }
}

作者:jzhhh
链接:https://leetcode-cn.com/problems/maximum-number-of-eaten-apples/solution/c-yong-pai-xu-zi-dian-sorteddictionaryda-jl4n/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

发表评论

您的电子邮箱地址不会被公开。