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

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

厨房里总共有 n 个橘子,你决定每一天选择如下方式之一吃这些橘子:

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

每天你只能从以上 3 种方案中选择一种方案。

请你返回吃掉所有 n 个橘子的最少天数。

示例 1:

输入:n = 10
输出:4
解释:你总共有 10 个橘子。
第 1 天:吃 1 个橘子,剩余橘子数 10 - 1 = 9。
第 2 天:吃 6 个橘子,剩余橘子数 9 - 2*(9/3) = 9 - 6 = 3。(9 可以被 3 整除)
第 3 天:吃 2 个橘子,剩余橘子数 3 - 2*(3/3) = 3 - 2 = 1。
第 4 天:吃掉最后 1 个橘子,剩余橘子数 1 - 1 = 0。
你需要至少 4 天吃掉 10 个橘子。

示例 2:

输入:n = 6
输出:3
解释:你总共有 6 个橘子。
第 1 天:吃 3 个橘子,剩余橘子数 6 - 6/2 = 6 - 3 = 3。(6 可以被 2 整除)
第 2 天:吃 2 个橘子,剩余橘子数 3 - 2*(3/3) = 3 - 2 = 1。(3 可以被 3 整除)
第 3 天:吃掉剩余 1 个橘子,剩余橘子数 1 - 1 = 0。
你至少需要 3 天吃掉 6 个橘子。

示例 3:

输入:n = 1
输出:1

示例 4:

输入:n = 56
输出:6

思考:对于这个题,假定“吃掉一个橘子”为“操作1”,“吃掉 n/2 个橘子”为“操作2”,“吃掉 2*(n/3) 个橘子”为“操作3”。

我们首先可以猜想一下,尽量多用操作2和操作3,对于操作1尽量少用。

同时可以总结一个公式

image.png

这个证明参照官方题解

class Solution {
     HashMap<Integer, Integer> map = new HashMap<>(1024);
     public int minDays(int n) {    
        if (n <= 1) {
            return n;
        }
        if (map.containsKey(n)) {
            return map.get(n);
        }
        map.put(n,Math.min(n % 2 + 1 + minDays(n / 2),n % 3 + 1 + minDays(n / 3)));
        return map.get(n);
    }
}

在这里要说明一点,这里用的是记忆化搜索,每次需要用到上次map.put()的结果,因此需要将HashMap作为全局变量,否则放到里面去,如下

class Solution {
     public int minDays(int n) {
        HashMap<Integer, Integer> map = new HashMap<>(1024);
        if (n <= 1) {
            return n;
        }
        if (map.containsKey(n)) {
            return map.get(n);
        }
        map.put(n,Math.min(n % 2 + 1 + minDays(n / 2),n % 3 + 1 + minDays(n / 3)));
        return map.get(n);
    }
}

提交就会报错

因此算法小白的我在这儿涨个经验教训,记忆化搜索用到的集合类型之类的尽量用全局变量。


相关文章
|
6月前
|
存储 人工智能 算法
鸿蒙HamonyOS应用上架手动签名与发布
鸿蒙HamonyOS应用上架手动签名与发布
341 4
鸿蒙HamonyOS应用上架手动签名与发布
|
6月前
|
机器学习/深度学习 人工智能 自然语言处理
Transformer架构:重塑现代AI的核心引擎
Transformer架构:重塑现代AI的核心引擎
632 98
|
6月前
|
存储 弹性计算
租用阿里云服务器按小时如何收费?1小时收费标准说明
阿里云服务器按小时收费,不同配置价格不同。例如经济型e实例2核2G每小时0.094元,计算型c9i实例2核4G每小时0.3873元,4核8G配置约0.77元/小时。价格因实例类型和资源配置而异,按量付费,先用后付。更多优惠可参与阿里云官方活动。
1200 1
|
6月前
|
存储 C语言 C++
& 符号的含义和用法
在C语言中,`&`符号常用于取地址,如`scanf`中传递变量地址以存储输入数据。示例中`&a`和`&x`获取变量内存地址,确保数据正确读入。省略会导致未定义行为。此外,`&`还用于指针声明、按位与运算等,是C/C++中的关键操作符之一。
1836 0
|
11月前
|
人工智能 JSON 前端开发
分享一个非常实用的在线AI工具网站
在线工具网是一个包含AI工具、站长工具、开发人员工具、实用工具、AI助手,能够提供最新AI知识库、在线编码、正则表达式、加密解密、二维码生成、在线进制转换、JSON解析格式化、JavaScript、css、httml格式化/混淆/压缩、时间戳转换等免费在线AI工具平台。
382 34
|
算法 数据安全/隐私保护
基于AutoEncode自编码器的端到端无线通信系统matlab误码率仿真
本项目基于MATLAB 2022a实现自编码器在无线通信系统中的应用,仿真结果无水印。自编码器由编码器和解码器组成,通过最小化重构误差(如MSE)进行训练,采用Adam等优化算法。核心程序包括训练、编码、解码及误码率计算,并通过端到端训练提升系统性能,适应复杂无线环境。
380 65
|
11月前
|
人工智能 自然语言处理 Cloud Native
【攻略】Bolt.diy 云端部署与应用实战:快速生成你的创意助手
随着AI应用从实验室走向大众,构建低门槛、高效率的AI助手平台成为开发者关注焦点。阿里云推出的Bolt.diy解决方案,开源灵活且部署快捷,支持函数计算FC与百炼大模型服务集成,大幅降低全栈AI应用开发难度。本文分享了实际部署Bolt.diy的全过程,并通过创建个人AI项目助理演示其强大功能。无论是生成项目计划、技术文档,还是搭建工具页面,Bolt.diy都能助力开发者快速实现创意,提升效率。文章还探讨了使用中的小问题及优化建议,适合对AI开发感兴趣的读者体验尝试。
330 10
|
存储 安全 网络安全
蜜罐技术:如何跟踪攻击者的活动
【10月更文挑战第22天】蜜罐是一种用于网络安全的系统,通过模拟漏洞吸引攻击者,记录其行为以研究攻击手法。分为高交互和低交互两种类型,前者提供真实操作系统服务,后者仅模拟部分系统功能。蜜罐有助于收集恶意软件样本,分析攻击者行为,提高网络安全防御。
485 3
|
Unix Android开发 iOS开发
操作系统的历史演变过程
【10月更文挑战第15天】操作系统的历史演变过程
686 2

热门文章

最新文章