2022-04-29:厨房里总共有 n 个橘子,你决定每一天选择如下方式之一吃这些橘子: 吃掉一个橘子。 如果剩余橘子数 n 能被 2 整除,那么你可以吃掉 n/2 个橘子。 如果剩余橘子数 n 能被

Posted 福大大架构师每日一题

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2022-04-29:厨房里总共有 n 个橘子,你决定每一天选择如下方式之一吃这些橘子: 吃掉一个橘子。 如果剩余橘子数 n 能被 2 整除,那么你可以吃掉 n/2 个橘子。 如果剩余橘子数 n 能被相关的知识,希望对你有一定的参考价值。

2022-04-29:厨房里总共有 n 个橘子,你决定每一天选择如下方式之一吃这些橘子:
吃掉一个橘子。
如果剩余橘子数 n 能被 2 整除,那么你可以吃掉 n/2 个橘子。
如果剩余橘子数 n 能被 3 整除,那么你可以吃掉 2*(n/3) 个橘子。
每天你只能从以上 3 种方案中选择一种方案。
请你返回吃掉所有 n 个橘子的最少天数。
输入: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 个橘子。
力扣1553. 吃掉 N 个橘子的最少天数。
来自腾讯。

答案2022-04-29:

能按比例吃的时候,绝不一个一个吃。递归。1/3和1/2取最小值。

代码用rust编写。代码如下:

use std::collections::HashMap;

fn main() 
    // 所有的答案都填在这个表里
    // dp这个表对所有的过程共用
    // 左神代码里,dp是全局变量。rust里没找到实现的方法。故采用传参的方式。
    let mut dp: HashMap<isize, isize> = HashMap::new();
    let n: isize = 10;
    let ans = min_days(n, &mut dp);
    println!("ans = ", ans);


fn min_days(n: isize, dp: &mut HashMap<isize, isize>) -> isize 
    if n <= 1 
        return n;
    
    if let Some(x) = dp.get(&n) 
        return *x;
    

    // 1) 吃掉一个橘子
    // 2) 如果n能被2整除,吃掉一半的橘子,剩下一半
    // 3) 如果n能被3正数,吃掉三分之二的橘子,剩下三分之一
    // 因为方法2)和3),是按比例吃橘子,所以必然会非常快
    // 所以,决策如下:
    // 可能性1:为了使用2)方法,先把橘子吃成2的整数倍,然后直接干掉一半,剩下的n/2调用递归
    // 即,n % 2 + 1 + minDays(n/2)
    // 可能性2:为了使用3)方法,先把橘子吃成3的整数倍,然后直接干掉三分之二,剩下的n/3调用递归
    // 即,n % 3 + 1 + minDays(n/3)
    // 至于方法1),完全是为了这两种可能性服务的,因为能按比例吃,肯定比一个一个吃快(显而易见的贪心)
    let ans = get_min(
        n % 2 + 1 + min_days(n / 2, dp),
        n % 3 + 1 + min_days(n / 3, dp),
    );
    dp.insert(n, ans);
    return ans;


fn get_min(a: isize, b: isize) -> isize 
    if a < b 
        a
     else 
        b
    

执行结果如下:


左神java代码

创作打卡挑战赛 赢取流量/现金/CSDN周边激励大奖

以上是关于2022-04-29:厨房里总共有 n 个橘子,你决定每一天选择如下方式之一吃这些橘子: 吃掉一个橘子。 如果剩余橘子数 n 能被 2 整除,那么你可以吃掉 n/2 个橘子。 如果剩余橘子数 n 能被的主要内容,如果未能解决你的问题,请参考以下文章

1046: 晚餐

厨房橱柜一体有哪些好处你知道吗

2022-06-14:数组的最大与和。 给你一个长度为 n 的整数数组 nums 和一个整数 numSlots ,满足2 * numSlots >= n 。总共有 numSlots 个篮子,编号为 1

如何在自家厨房里制作LSD

Scala - implicit 我去给你买个橘子

n层满k叉树总共有多少个节点