首页 > 其他分享 >力扣-1705. 吃苹果的最大数目

力扣-1705. 吃苹果的最大数目

时间:2024-06-23 09:21:08浏览次数:22  
标签:腐烂 吃掉 baseTime 1705 days 力扣 apples 苹果

1.题目介绍

题目地址(1705. 吃苹果的最大数目 - 力扣(LeetCode))

https://leetcode.cn/problems/maximum-number-of-eaten-apples/

题目描述

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

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

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

 

示例 1:

输入:apples = [1,2,3,5,2], days = [3,2,1,4,2]
输出:7
解释:你可以吃掉 7 个苹果:
- 第一天,你吃掉第一天长出来的苹果。
- 第二天,你吃掉一个第二天长出来的苹果。
- 第三天,你吃掉一个第二天长出来的苹果。过了这一天,第三天长出来的苹果就已经腐烂了。
- 第四天到第七天,你吃的都是第四天长出来的苹果。

示例 2:

输入:apples = [3,0,0,0,0,2], days = [3,0,0,0,0,2]
输出:5
解释:你可以吃掉 5 个苹果:
- 第一天到第三天,你吃的都是第一天长出来的苹果。
- 第四天和第五天不吃苹果。
- 第六天和第七天,你吃的都是第六天长出来的苹果。

 

提示:

  • apples.length == n
  • days.length == n
  • 1 <= n <= 2 * 104
  • 0 <= apples[i], days[i] <= 2 * 104
  • 只有在 apples[i] = 0 时,days[i] = 0 才成立

2.题解

2.1 贪心策略 + 优先级队列

思路

这里的贪心策略很容易想到,我们肯定要先吃那些最接近腐烂日期的苹果,因为其他腐烂日期更长的苹果,有更多可选择的食用日期。
同时我们每次食用的苹果必须保证是:1.未腐烂的 2.还有剩余的
就像将大象装进冰箱需要三步,这里我们吃苹果也需要三步:
1.当前日期长出的苹果,放进我们的优先级队列中
2.我们丢掉那些腐烂的苹果
3.我们从优先级队列中吃掉那些最接近腐烂的苹果,如果吃完了这类苹果(app == 0),从优先级队列中移除

代码

// typedef pair<int, int> pii 
using pii = pair<int,int>; 
class Solution {
public:
    int eatenApples(vector<int>& apples, vector<int>& days) {
        priority_queue<pii, vector<pii>, greater<pii>> maxHeap;
        int ans = 0, baseTime = 0, n = apples.size();

        while(!maxHeap.empty() || baseTime < n){
            // 新增苹果(去除未长出新的苹果的情况)
            if(baseTime < n &&  apples[baseTime] != 0 && days[baseTime] != 0){
                maxHeap.emplace(baseTime + days[baseTime], apples[baseTime]);
            }

            // 去除已经腐烂的苹果(腐烂时间 <= 当前时间)
            while(!maxHeap.empty() && maxHeap.top().first <= baseTime){
                maxHeap.pop();
            }

            // 吃一个苹果(前提是当前还有空余苹果)
            if(!maxHeap.empty()){
                ans++;
                int app = maxHeap.top().second, day = maxHeap.top().first;
                maxHeap.pop();
                if(--app){
                    maxHeap.emplace(day, app);
                }
            }
            baseTime++;
        }
        return ans;
    }
};

复杂度分析

  • 时间复杂度:'o(w* log K),其中'N 是任务的总数量,'K 是任务种类的数量。
    对于每个任务操作,堆的操作(插入和删除)是“o(log K)”的。
  • 空间复杂度:o(k),主要用于存储任务频率的哈希表和优先级队列。

标签:腐烂,吃掉,baseTime,1705,days,力扣,apples,苹果
From: https://www.cnblogs.com/trmbh12/p/18263081

相关文章

  • Leetcode 力扣 125. 验证回文串 (抖音号:708231408)
    如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。字母和数字都属于字母数字字符。给你一个字符串 s,如果它是 回文串 ,返回 true ;否则,返回 false 。示例1:输入:s="Aman,aplan,......
  • Leetcode 力扣 128. 最长连续序列 (抖音号:708231408)
    给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请你设计并实现时间复杂度为 O(n) 的算法解决此问题。示例1:输入:nums=[100,4,200,1,3,2]输出:4解释:最长数字连续序列是[1,2,3,4]。它的长度为4。示例2:输入:nums=......
  • 苹果cms10影视网整站源码下载/苹果cms模板MXone Pro自适应影视电影网站模板
    下载地址:苹果cms10影视网整站源码下载/苹果cms模板MXonePro自适应影视电影网站模板模板带有夜间模式、白天晚上自动切换,有观影记录、后台设置页。全新UI全新框架,加载响应速度更快,seo更好,去除多余页面优化代码。MXonePro是一款简约清新,美观大气,单纯的影视模板,没有复杂的页面......
  • 力扣-621. 任务调度器
    1.题目题目地址(621.任务调度器-力扣(LeetCode))https://leetcode.cn/problems/task-scheduler/题目描述给你一个用字符数组 tasks表示的CPU需要执行的任务列表,用字母A到Z表示,以及一个冷却时间n。每个周期或时间间隔允许完成一项任务。任务可以按任何顺序完成,但有一......
  • 苹果因数字市场法问题不会在欧盟市场推出人工智能技术
    近年来,人工智能(AI)技术的迅猛发展引发了全球范围内的广泛关注和讨论。作为科技行业的领军企业,苹果公司在AI领域的投入和创新也备受瞩目。然而,令人意外的是,苹果公司因监管问题决定不在欧盟市场推出其最新的AI技术。本文将探讨这一决定背后的原因及其可能带来的影响。一、欧盟的严格......
  • 190.回溯算法:组合(力扣)
    代码随想录(programmercarl.com)一、什么是回溯算法    回溯算法是一种通用的算法设计技巧,特别适用于解决组合、排列、子集等问题。它通过逐步构建解决方案,并在发现部分解决方案无效时撤销(回溯)部分计算,从而寻找所有可能的解决方案。    回溯算法的基本思......
  • 力扣每日一题 6/21 数组
    博客主页:誓则盟约系列专栏:IT竞赛专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞......
  • mac苹果窗口辅助工具:Magnet for mac 2.14.0中文免激活版
    Magnet是一款针对MacOS系统的窗口管理工具软件。它能够帮助用户更加高效地管理和组织桌面上的窗口,通过简单的快捷键操作,可以将窗口自动调整到指定的位置和大小,实现多窗口快速布局。Magnet还支持多显示器环境下的窗口管理,可以让用户更加轻松地在多屏幕之间切换和布局窗口。......
  • 力扣-763. 划分字母区间
    题目地址(763.划分字母区间-力扣(LeetCode))https://leetcode.cn/problems/partition-labels/题目描述给你一个字符串s。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是s。返回......
  • Nvidia 超越苹果和微软,成为全球最有价值的公司
    在科技行业,市值是衡量公司成功与否的重要指标。近年来,苹果和微软一直在全球市值排行榜上占据前列。然而,随着人工智能(AI)和图形处理单元(GPU)市场的迅猛发展,Nvidia这家以生产高性能GPU而闻名的公司,成功超越了苹果和微软,成为全球最有价值的公司。这一成就不仅标志着Nvidia的崛起,也......