当前位置: 首页 > news >正文

【Leetcode】1705. 吃苹果的最大数目

文章目录

  • 题目
  • 思路
  • 代码
  • 复杂度分析
    • 时间复杂度
    • 空间复杂度
  • 结果
  • 总结

题目

题目链接🔗

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

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

给你两个长度为 n n n 的整数数组 d a y s days days a p p l e s apples apples ,返回你可以吃掉的苹果的最大数目。

示例 1:

输入:apples = [1,2,3,5,2], days = [3,2,1,4,2]

输出:7

示例 2:

输入:apples = [3,0,0,5,0], days = [3,0,0,4,0]

输出:5

提示:

  1. 1 ≤ a p p l e s . l e n g t h ≤ 5 ∗ 1 0 4 1 \leq apples.length \leq 5 * 10^4 1apples.length5104
  2. 0 ≤ a p p l e s [ i ] ≤ 5 ∗ 1 0 4 0 \leq apples[i] \leq 5 * 10^4 0apples[i]5104
  3. 1 ≤ d a y s [ i ] ≤ 5 ∗ 1 0 4 1 \leq days[i] \leq 5 * 10^4 1days[i]5104
  4. 每天至少有一个苹果,即 a p p l e s . l e n g t h = = d a y s . l e n g t h apples.length == days.length apples.length==days.length

思路

这个问题可以通过贪心算法来解决。我们可以维护一个优先队列(最小堆),存储未来几天内会坏掉的苹果。每天,我们从队列中移除已经坏掉的苹果,然后根据当前的苹果数量和剩余天数来决定每天可以吃多少苹果。

代码

class Solution {
public:int eatenApples(vector<int>& apples, vector<int>& days) {int d = 0, ans = 0;map<int, int> dict; // 存储未来几天内会坏掉的苹果for (auto [n, t] : views::zip(apples, days)) {// 移除已经坏掉的苹果dict.erase(dict.begin(), dict.upper_bound(d));// 添加今天的苹果if (n)dict[d + t] += n;// 如果有苹果可以吃if (dict.size()) {ans++;// 吃掉一个苹果if (!--dict.begin()->second)dict.erase(dict.begin());}d++;}// 继续吃剩下的苹果while (dict.size()) {dict.erase(dict.begin(), dict.upper_bound(d));if (dict.empty())return ans;auto [t, n] = *dict.begin();dict.erase(dict.begin());int tmp = min(t - d, n);d += tmp;ans += tmp;}return ans;}
};

复杂度分析

时间复杂度

O ( n l o g n ) O(nlogn) O(nlogn),其中 n n n 是苹果的天数。主要时间消耗在对 map 的操作,每次插入和删除操作的时间复杂度为 O ( l o g n ) O(logn) O(logn)

空间复杂度

O ( n ) O(n) O(n)

结果

在这里插入图片描述

总结

本题是一个贪心算法的问题,关键在于理解如何维护一个存储未来几天内会坏掉的苹果的数据结构,并据此计算每天可以吃多少苹果。

相关文章:

【Leetcode】1705. 吃苹果的最大数目

文章目录 题目思路代码复杂度分析时间复杂度空间复杂度 结果总结 题目 题目链接&#x1f517; 有一棵特殊的苹果树&#xff0c;一连 n n n 天&#xff0c;每天都可以长出若干个苹果。在第 i i i 天&#xff0c;树上会长出 a p p l e s [ i ] apples[i] apples[i] 个苹果&a…...

职业技能赛赛后心得

这是一位粉丝所要求的&#xff0c;也感谢这位粉丝对我的支持。 那么本篇文章我也是分成四个部分&#xff0c;来总结一下这次赛后心得。 赛中问题 那么这里的赛中问题不会只包含我所遇到的问题&#xff0c;也会包含赛中其他选手出现的问题。 那么首先我先说一下我在赛中遇到的…...

从AI换脸到篡改图像,合合信息如何提升视觉内容安全?

本文目录 引言一、AI“真假之战”下的发展现状与考验挑战1.1 视觉内容安全现状与技术分类1.2视觉内容安全企业1.3视觉内容安全领域挑战 二、开山之石&#xff1a;引领视觉内容安全的创新之路2.1合合内容安全系统2.2发起编制相关技术规范2.3参与篡改检测挑战赛 三、视觉内容安全…...

c# 实现一个简单的异常日志记录(异常迭代+分片+定时清理)+AOP Rougamo全局注入

1. 日志目录和文件管理 日志目录&#xff1a;日志文件存储在 ./Exceptions 目录下。日志文件命名&#xff1a;日志文件的命名格式为 yyyy_MM_dd.log&#xff0c;表示当天的日期。如果当天的日志文件大小超过 maxFileSizeBytes&#xff08;3KB&#xff09;&#xff0c;则会创建…...

webrtc学习----前端推流拉流,局域网socket版,一对多

提示&#xff1a;局域网socket版&#xff0c;一对多 文章目录 [TOC](文章目录) 前言一、教程二、webrtc工作流程三、推流端四、拉流五、socket服务六、效果七、备注总结 前言 WebRTC&#xff08;Web Real-Time Communication&#xff09;是一种实时通讯技术&#xff0c;允许网…...

美国加州房价数据分析01

1.项目简介 本数据分析项目目的是分析美国加州房价数据&#xff0c;预测房价中值。 环境要求&#xff1a; ancondajupyter notebookpython3.10.10 虚拟环境&#xff1a; pandas 2.1.1 numpy 1.26.1 matplotlib 3.8.0 scikit-learn1.3.1 2. 导入并探索数据集 通用的数据分析…...

用Python开启人工智能之旅(四)深度学习的框架和使用方法

第四部分&#xff1a;深度学习的框架和使用方法 用Python开启人工智能之旅&#xff08;一&#xff09;Python简介与安装 用Python开启人工智能之旅&#xff08;二&#xff09;Python基础 用Python开启人工智能之旅&#xff08;三&#xff09;常用的机器学习算法与实现 用Pyt…...

两分钟解决:vscode卡在设置SSH主机,VS Code-正在本地初始化VSCode服务器

问题原因 remote-ssh还是有一些bug的&#xff0c;在跟新之后可能会一直加载初始化SSH主机解决方案 1.打开终端2.登录链接vscode的账号&#xff0c;到家目录下3.找到 .vscode-server文件,删掉这个文件4.重启 vscode 就没问题了...

信号仿真高级工程师面试题

信号仿真高级工程师面试题可能涵盖多个方面,旨在全面评估应聘者的专业知识、技能水平、实践经验和问题解决能力。以下是一些可能的面试题及其简要解析: 一、专业知识与技能 描述你对信号仿真的理解 考察点:对信号仿真基本概念、原理及应用的掌握程度。参考答案:信号仿真是…...

循环和迭代

从更高层次的思维角度来看迭代和循环的区别&#xff1a; 哲学层面&#xff1a; 迭代体现了"螺旋上升"的发展理念&#xff0c;每次迭代都在前一次的基础上有所提升和改进 循环体现了"周而复始"的概念&#xff0c;强调重复相同的过程 思维方式&#xff1a…...

一个简单封装的的nodejs缓存对象

我们在日常编码中&#xff0c;经常会用到缓存&#xff0c;而一个有效的缓存管理&#xff0c;也是大家必不可少的工具。而nodejs没有内置专用的缓存对象&#xff0c;并且由于js的作用域链的原因&#xff0c;很多变量使用起来容易出错&#xff0c;如果用一个通用的缓存管理起来&a…...

【Rust自学】5.3. struct的方法(Method)

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 5.3.1. 什么是方法(Method) 方法和函数类似&#xff0c;也是用fn关键字进行声明&#xff0c;方法也有名称&#xff0c;也有参数&#xff…...

ChatGPT之父:奥尔特曼

奥尔特曼 阿尔特曼一般指萨姆奥尔特曼,他是OpenAI的联合创始人兼首席执行官,被称为“ChatGPT之父”.以下是其具体介绍: 个人经历 1985年4月22日出生于美国芝加哥,8岁学会编程,9岁拥有电脑,对信息技术和互联网产生兴趣.高中就读于约翰巴勒斯中学,后进入斯坦福大学主修计…...

如何在谷歌浏览器中设置桌面快捷方式

在日常使用电脑时&#xff0c;反复在浏览器中输入经常访问的网址不仅耗时&#xff0c;而且降低了工作效率。为了解决这一问题&#xff0c;我们可以通过在主屏幕上创建谷歌浏览器的快捷方式来简化操作。本文将详细介绍如何在Windows和Mac系统中实现这一功能。 一、步骤概述 1. …...

systemverilog中的priority if

1 基本概念 在 SystemVerilog 中&#xff0c;priority - if是一种条件判断结构。它和普通的if - else语句类似&#xff0c;但在条件评估和错误检查方面有自己的特点&#xff0c;主要用于按顺序评估多个条件&#xff0c;并且对不符合预期的情况进行报错。报错如下两点 当所有条件…...

图像处理-Ch2-空间域的图像增强

Ch2 空间域的图像增强 文章目录 Ch2 空间域的图像增强Background灰度变换函数(Gray-level Transformation)对数变换(Logarithmic)幂律变换(Power-Law)分段线性变换函数(Piecewise-Linear)对比度拉伸(Contrast-Stretching)灰度级分层(Gray-level Slicing) 直方图处理(Histogram …...

css 编写注意-1-命名约定

编写按照可维护性、性能和可读性规则&#xff1a; 1.代码组织与结构​​​​​​​ 层次清晰&#xff1a;使用模块化的结构&#xff0c;将样式分块组织。命名规范&#xff1a;采用统一的命名规则&#xff08;如 BEM、SMACSS&#xff09;以增强可读性。​​​​​​​ /* BEM …...

虚幻引擎反射机制

在虚幻引擎中&#xff0c;反射系统是一种强大的机制&#xff0c;它允许开发者和引擎本身在运行时获取并操作类、对象、属性和方法的元信息。这个系统是基于UObject&#xff08;Unreal Engine中所有支持反射的对象的基类&#xff09;构建的&#xff0c;为游戏开发提供了极大的灵…...

Knife4j Swagger

1. 依赖 <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>3.0.3</version></dependency>2. 配置 第二步配置完成就可以访问&#xff1a;http://localhost…...

Xcode 16 编译弹窗问题、编译通过无法,编译通过打包等问题汇总

问题1&#xff1a;打包的过程中不断提示 &#xff1a;codesign 想要访问你的钥匙串中的密钥“develop 或者distribution 证书” 解决&#xff1a;打开钥匙串&#xff0c;点击证书---显示简介---信任----改为始终信任 &#xff08;记住 &#xff1a;不能只修改钥匙的显示简介的…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

算法笔记2

1.字符串拼接最好用StringBuilder&#xff0c;不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

MySQL账号权限管理指南:安全创建账户与精细授权技巧

在MySQL数据库管理中&#xff0c;合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号&#xff1f; 最小权限原则&#xf…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; ​遍历字符串​&#xff1a;通过外层循环逐一检查每个字符。​遇到 ? 时处理​&#xff1a; 内层循环遍历小写字母&#xff08;a 到 z&#xff09;。对每个字母检查是否满足&#xff1a; ​与…...