1553. 吃掉 N 个橘子的最少天数(记忆化+贪心优化)

Problem: 1553. 吃掉 N 个橘子的最少天数

文章目录

  • 题目
  • 思路
  • Code

题目

使得 n 变成0的操作有三种方式 :

  • 吃掉一个橘子。
  • 如果剩余橘子数 n 能被 2 整除,那么你可以吃掉 n/2 个橘子。
  • 如果剩余橘子数 n 能被 3 整除,那么你可以吃掉 2*(n/3) 个橘子。

思路

如果我们每天吃一个橘子(每次是操作1),那么从n到0要经过n天,所以最坏的情况下就是n。 要想保证天数最少,最好每天吃的最多。最暴力的方法就是

image.png

class Solution {
public:// 记录吃掉n 个橘子的最少天数unordered_map<int,int> memo ; int minDays(int n) {if(n == 1 ) {memo[n] = 1 ; return 1 ; }if(memo.count(n)) {return memo[n] ; }if(n%2 == 0 && n%3 ==0 ){memo[n] = min( minDays(n/2), minDays(n/3)) +1  ;memo[n] = min(memo[n] ,minDays(n-1)) ; return memo[n] ; }else if(n %2 == 0 && n%3 !=0 ){return memo[n] = min (minDays(n/2) , minDays(n-1) ) +1 ; ; }else if( n%3 ==0 && n%2 !=0) {return memo[n] = min( minDays(n/3) , minDays(n-1) )+1  ; }else{return memo[n] = minDays(n-1) +1 ;}return memo[n] ; }
};

但是显然是导致栈溢出

优化一下

我们肯定是希望吃掉一个橘子这样的操作尽可能少(贪心)。优先选择操作2和3.

  • 假设,我们对n 先进行k次操作,然后再进行操作2,那么橘子的数量就从n 变成了(n-k)/2 。 一共操作了 k+1次;如果我们先将n变成靠近2的倍数的那个数 n t ( n t < n n_{t} ( n_{t} < n nt(nt<n ),然后再执行操作1. 假设 k 0 k_{0} k0 ∣ n − n t ∣ |n- n_{t}| nnt, k 0 k_{0} k0是模2的余数,那么我们只需要执行 k 0 k_{0} k0 次的操作1(靠近2的倍数) ,然后执行1次操作2 和 ( k − k 0 ) (k-k_{0}) (kk0)次的操作1,即eq.1
    ( n − k 0 ) 2 − ( k − k 0 ) 2 = ( n − k ) 2 ( 1 ) \frac{(n-k_{0})}{2} -\frac{ (k-k_{0})}{2} = \frac{(n-k)}{2} (1) 2(nk0)2(kk0)=2(nk)1
    一共执行了 k 0 + 1 + ( k − k 0 ) 2 k_{0} +1 + \frac{(k-k_{0})}{2} k0+1+2(kk0) 次 小于 k + 1 k+1 k+1次。
    同理操作3 也是可以这样处理 。

Code

class Solution {
public:unordered_map<int,int> memo; int minDays(int n) {if(n <=1 ) return n ; if(memo.count(n) ) {return memo[n] ; }// 通过操作1减少到靠近2和3的倍数int k0_2 =  n%2 ; int k0_3 =  n%3 ; return memo[n] = min(k0_2 +minDays(n/2) , k0_3 +minDays(n/3) ) +1; }};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/162552.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

易点易动设备管理系统提升设备能耗管理和设备状态监控效率

如今&#xff0c;能源效率和设备状态监控对于企业来说变得越发重要。传统的设备管理方式往往存在能耗浪费和难以实时监控设备状态的问题。为了解决这些问题&#xff0c;易点易动设备管理系统应运而生。本文将介绍易点易动设备管理系统的功能和优势&#xff0c;以及如何通过它提…

Oracle数据库安装踩坑记录

Oracle数据库安装踩坑记录 踩坑目录 可能会用到的教程1. 管理员用户&#xff08;sys&#xff09;登录oracle命令2. 默认密码&#xff1a;三个 如果忘记改密码参考 1. 登录后修改密码3. 查看账号密码&#xff1a;只有sys用户登录后才能查看4. sqldeveloper 连接oracle数据库5. o…

简墨的进化之路:打造大模型数据计算系统的云存储底座

10月24日程序员节&#xff0c;「大模型数据计算系统」2023拓数派年度技术论坛在上海圆满落幕&#xff0c;拓数派大模型数据计算系统&#xff08;PieDataComputingSystem&#xff0c;缩写&#xff1a;πDataCS&#xff09;如约而至&#xff01;πDataCS 以云原生技术重构数据存储…

论文浅尝 | 用于文档级事件关系抽取的稀疏事件表示的判别推理

笔记整理&#xff1a;邹铭辉&#xff0c;天津大学硕士&#xff0c;研究方向为自然语言处理 链接&#xff1a;https://aclanthology.org/2023.acl-long.897 动机 文档级事件关系抽取&#xff08;Document-level Event-Event Relation Extraction&#xff0c;简称DERE&#xff09…

【TypeScrpt算法】算法的复杂度分析

算法的复杂度分析 什么是算法复杂度&#xff1f; 不同的算法&#xff0c;其实效率是不一样的 让我举一个案例来比较两种不同的算法在查找数组中给定元素的时间复杂度 [1,2,3,4,5,6,7,...9999,n] 顺序查找 这种方法从头到尾遍历整个数组&#xff0c;依次比较每个元素和给定元…

SAP-查看业务变更记录

一、通过事务码查询修改记录 1、输入TCODE&#xff1a;AUT10&#xff0c;输入时间和事务处理代码&#xff0c;全部搜索输入*。 2、点击刷新&#xff0c;对已输入的条件进行重置。 3、在左侧下菜单&#xff0c;选择要查询的事务记录&#xff0c;双击&#xff0c;会带入“事务处…

【nlp】3.2 Transformer论文复现:1. 输入部分(文本嵌入层和位置编码器)

Transformer论文复现:输入部分(文本嵌入层和位置编码器) 1 输入复现1.1 文本嵌入层1.1.1 文本嵌入层的作用1.1.2 文本嵌入层的代码实现1.1.3 文本嵌入层中的注意事项1.2 位置编码器1.2.1 位置编码器的作用1.2.2 位置编码器的代码实现1.2.3 位置编码器中的注意事项1 输入复现…

探索结构体的奥秘

目录 &#x1f342;结构体 1&#xff0c;结构体的声明 1.1 结构的基础知识 1.2 结构的声明 1.3 特殊的声明 1.4 结构的自引用 1.5 结构体变量的定义和初始化 1.6 结构体内存对齐 1.6.1 如何计算 1.6.2 为什么存在内存对齐 1.7 修改默认对齐数 1.8 结构体传参 2&am…

3.7寸墨水屏蓝牙卡证

超薄机身&#xff0c;厚度不足一厘米&#xff0c;轻松佩戴无负重感。 无需基站&#xff0c;服务器&#xff0c;手机APP直接更新~ 独创快速扫描技术&#xff0c;智能感应标签 超长待机&#xff0c;超低功耗&#xff0c;Type C接口充电&#xff0c;一次充电可续航一年&#xf…

极智开发 | 随机初始化onnx模型权重的方法

欢迎关注我的公众号 [极智视界],获取我的更多经验分享 大家好,我是极智视界,本文分享一下 随机初始化onnx模型权重的方法。 邀您加入我的知识星球「极智视界」,星球内有超多好玩的项目实战源码和资源下载,链接:https://t.zsxq.com/0aiNxERDq onnx 模型一直是在算法部署中…

增量有余、后劲不足,星途汽车10月份销量环比下降3.9%

撰稿|行星 来源|贝多财经 近日&#xff0c;奇瑞集团发布了10月销量月报。报告显示&#xff0c;奇瑞集团于2023年10月销售汽车20.03万辆&#xff0c;同比增长50.8%&#xff0c;单月销量首次突破20万辆&#xff1b;2023年前10个月的累计销量为145.36辆&#xff0c;同比增长41.6…

C语言运算符详解

详细介绍了C语言表达式、算术运算符、赋值运算符、关系运算符、条件结构、逻辑运算符、位运算符的语法和使用方法&#xff0c;并讨论了运算符的优先级。 1、表达式与算术运算符 在C语言中&#xff0c;表达式是一个类似数学中的算式&#xff0c;表达式由变量、字面值、常量、运…

【坑】JDK21虚拟线程不支持run方法

【坑】JDK21虚拟线程不支持run方法 run // do nothing java.lang.VirtualThread Overridepublic void start() {start(ThreadContainers.root());}Overridepublic void run() {// do nothing}

2023年,人工智能在医疗行业领域的应用场景

本期行业洞察将带领大家了解人工智能在医疗行业领域的应用&#xff0c;主要了解在患者治疗和运营中的应用、人工智能作为预防工具以及大型医院目前如何使用人工智能。未来的智慧医疗时代已经悄然到来。 人工智能在患者治疗和机构运营中的应用 人工智能有望彻底改变医疗护理的…

csapp archlab part 1

part A [rootedb3963640a6 misc]#./yas sum.ys [rootedb3963640a6 misc]# ./yis sum.yo./yas 和 ./yis 是汇编语言编译器和模拟器的命令行工具。 ./yas 是一个汇编语言编译器&#xff0c;它将汇编语言代码转换为可执行的二进制文件。./yas sum.ys 将sum.ys文件编译成了sum.yo可…

计算机毕业设计项目选题推荐(免费领源码)Java+ssm+MYSQL酒店大数据资源管理系统的设计与实现02029

摘要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对酒店大数据资源管理系统等问题&#xff0c;对…

发挥云计算潜力:Amazon Lightsail 与 Amazon EC2 的综述

文章作者&#xff1a;Libai 欢迎来到云计算世界&#xff0c;这里有无数的机会和无限的应用程序增长。 在当今的数字时代&#xff0c;企业可能会发现管理基础架构和扩展应用程序具有挑战性。 传统的本地解决方案需要大量的硬件、软件和维护前期投资。 要满足不断增长的需求&…

3D Slicer使用与体绘制

3D Slicer默认不进行体绘制&#xff0c;右上角的三维重建窗口只显示一个空的立方体框。要进行体绘制&#xff0c;先切换到体绘制设置窗口&#xff1a; 在体绘制设置窗口中&#xff0c;选择进行体绘制的DICOM序列&#xff0c;然后将体绘制开关打开&#xff08;眼睛标志&#xff…

Omniverse合成数据生成【城市交通场景】

智慧城市是城市生活的未来。 然而&#xff0c;它们可能给城市规划者带来各种挑战&#xff0c;尤其是在交通领域。 为了取得成功&#xff0c;城市的各个方面—从环境和基础设施到商业和教育—必须在功能上整合。 这可能很困难&#xff0c;因为单独管理交通流量是一个复杂的问题…