代码随想录算法训练营第四十五天|70. 爬楼梯 (进阶)、322. 零钱兑换、279.完全平方数

news2024/11/29 10:38:32

文章目录

      • 70. 爬楼梯 (进阶)
      • 322. 零钱兑换
      • 279.完全平方数

今天的题一道是求装满背包的可能情况;另两道都是求装满背包的所需的最小物品数目,不用考虑是组合还是排序问题

70. 爬楼梯 (进阶)

背包问题,求装满背包的个数问题

  • 题目链接:代码随想录

  • 解题思路:
    本题爬楼梯就是把之前需要递推的思路:dp[i] = dp[i - 1] + dp[i - 2]由前面两种状态推导而来,改为
    一共重量为i的背包(楼梯数),用1和2重量装满,有几种方法,属于是背包问题求解例子

public int climbStairs(int n) {
    //1.确定dp数组,dp[i]表示装满第i容量的背包,有几种方法
    int[] dp = new int[n + 1];//初始化为n+1个背包
    //1.初始化
    dp[0] = 1;
    for (int i = 1; i <= n; i++) {//先遍历背包
        for (int j = 1; j <= 2; j++) {//再遍历物品,因为物品的重量只有1和2
            /**
             * 改为一步一个台阶,两个台阶,三个台阶,.......,直到 m个台阶。问有多少种不同的方法可以爬到楼顶呢?
             * 这里物品遍历为1~m
             */
            if(i >= j){
                dp[i] += dp[i - j];
            }
        }
    }
    return dp[n];
}

322. 零钱兑换

本题学到背包问题有很多变式,分析清楚递推条件,初始化和遍历顺序即能写出解

①求硬币的最小个数问题 -----> 求装满背包的选取的最小物品个数
②每种硬币的数量是无限的,可以看出是典型的完全背包问题

  • 题目链接:代码随想录

  • 解题思路:
    1. dp[j]:凑足总额为j所需钱币的最少个数为dp[j]
    2.凑足总额为j - coins[i]的最少个数为dp[j - coins[i]].那么只需要加上一个钱币coins[i],即dp[j -coins[i]] + 1;
    所以公式为dp[j] = min(dp[j - coins[i]] + 1, dp[j])
    3.初始化:
    ①首先凑足总金额为0所需钱币的个数一定是0,那么dp[0] = 0
    再考虑到递推公式的特性,dp[j]必须初始化为一个最大的数,否则就会在min(dp[j - coins[i]] + 1, dp[j])比较的过程中被初始值覆盖
    4.遍历顺序:本题求钱币最小个数,那么钱币有顺序和没有顺序都可以,都不影响钱币的最小个数。所以本题并不强调集合是组合还是排列,所以for循环顺序不必纠结
    *

  • 推导过程:

    image-20230428225152551

public int coinChange(int[] coins, int amount) {
    //1.定义dp数组,dp[i]表示凑足重量为i的背包所需要的最小物品数量
    int[] dp = new int[amount + 1];
    //2.初始化赋值
    int max = Integer.MAX_VALUE;
    for (int i = 1; i < dp.length; i++) {
        dp[i] = max;
    }
    dp[0] = 0;
    //3.遍历
    for (int i = 0; i < coins.length; i++) {//先遍历物品
        for (int j = coins[i]; j <= amount; j++) {//完全背包,正序遍历

            //确保dp[j - coins[i]]不是初始的最大值
            if (dp[j - coins[i]] != max) {
                //选择硬币数目最小的情况
                dp[j] = Math.min(dp[j], dp[j - coins[i]] + 1);
            }
        }

    }
    //判断amount重量是否更新,若未更新,那么说明没有结果
    return dp[amount] == max ? -1 : dp[amount];
}

279.完全平方数

  • 题目链接:代码随想录

跟上一题对比来看

本题翻译:完全平方数就是物品(可以无限件使用),凑个正整数n就是背包,问凑满这个背包最少有多少物品?

  • 解题思路:
    本题同上题唯一不同之处是物品的形式
    上一题物品就是其本身,这一题物品是 i * i,不是放入原本的物品

  • 推导过程:

    image-20230428230719522

public int numSquares(int n) {
    //1.定义dp数组,dp[i]表示装满容量为i的背包的最小选择物品数字
    //物品为1的平方,2的平方,3的平方...
    //本题唯一区别是物品不单单是数字本身,而是一个数的平方,凑成背包的物品是一个数的平方
    int[] dp = new int[n + 1];
    //2.初始化
    int max = Integer.MAX_VALUE;
    for (int i = 1; i <= n; i++) {
        dp[i] = max;
    }
    dp[0] = 0;//这里不能装入0 * 0的物品,因为题目从1开始
    //3.遍历
    for (int i = 1; i * i <= n; i++) {//先遍历物品,物品从1开始,还有这个终止条件
        for (int j = i * i; j <= n; j++) {
            //确定前一个背包状态有有效值
            if(dp[j - i * i] != max){
                dp[j] = Math.min(dp[j],dp[j - i * i] + 1);
            }
        }

    }
    return dp[n];
}

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

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

相关文章

设置苹果电脑vsode在新窗口中打开文件

0、前言 最近切换到mac电脑工作&#xff0c;又得重新安装一些工具软件并设置。虽然这些设置并表示啥复杂的设置&#xff0c;但是久了不设置还是会忘记。于是记录之&#xff0c;也希望给能帮助到需要的人。 我们使用vscode阅读或者编辑文件时&#xff0c;有时候希望同时打开多…

RabbitMQ 01 概述

什么是消息队列 进行大量的远程调用时&#xff0c;传统的Http方式容易造成阻塞&#xff0c;所以引入了消息队列的概念&#xff0c;即让消息排队&#xff0c;按照队列进行消费。 它能够将发送方发送的信息放入队列中&#xff0c;当新的消息入队时&#xff0c;会通知接收方进行处…

MySQL的JSON 数据类型

概述&#xff1a; MySQL提供了一个专门用于存储JSON数据的数据类型&#xff1a;JSON。JSON数据类型允许您在MySQL数据库中存储和操作JSON格式的数据。 以下是关于JSON数据类型的一些基本操作和函数&#xff1a; 创建表&#xff1a; 要在表中创建一个JSON类型的列&#xff0…

C/C++每日一练(20230429)

目录 1. 螺旋矩阵 &#x1f31f;&#x1f31f; 2. 戳气球 &#x1f31f;&#x1f31f;&#x1f31f; 3. 实现五则运算 &#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1…

从0搭建Vue3组件库(十):如何搭建一个 Cli 脚手架

本篇文章将实现一个名为create-easyest脚手架的开发,只需一个命令npm init easyest就可以将整个组件库开发框架拉到本地。 创建 Cli 包 首先,我们在 packages 目录下新建 cli 目录,同执行pnpm init进行初始化,然后将包名改为create-easyest 这里需要知道的是当我们执行npm in…

layui框架实战案例(21):layui上传的哪些事(layui.upload组件、 file文件域、php后台上传)

上传的哪些事 一、核心方法与基础参数选项二、使用upload组件1.调用layui.upload2.文件上传进度条3.弹出进度条4.完整核心代码5.效果预览6.后台上传代码7.附带参数data 一、核心方法与基础参数选项 upload.render({elem: #uploadlicense//指向容器选择器, url: ?mIndex&ai…

Python每日一练(20230429)

目录 1. 地下城游戏 &#x1f31f;&#x1f31f;&#x1f31f; 2. 杨辉三角 II &#x1f31f; 3. 旋转数组 &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏…

HCIA-RS实验-路由配置-静态路由缺省路由(2)

接上文HCIA-RS实验-路由配置-静态路由&缺省路由 继续完成缺省路由&#xff1b;其他原截图就不再一一截图&#xff0c;有需要往回看一篇。 关闭上一篇的接口shutdown&#xff08;重新启动&#xff09; 上一篇在R2关闭的接口2 需要重新启动&#xff0c;输入 undo shutdown…

React--》Redux Toolkit的使用讲解

目录 Redux Toolkit redux toolkit的基本使用 RTK代码模块化 RTK QUERY的使用 useQuery参数 Redux Toolkit Redux Toolkit是Redux的工具包&#xff0c;简称RTK&#xff0c;可以帮助我们处理使用Redux过程中的重复性工作&#xff0c;简化Redux中的各种操作&#xff0c;当然…

< 每日小技巧: 基于Vue状态的过渡动画 - Transition 和 TransitionGroup>

》基于Vue状态的过渡动画 - Transition 和 TransitionGroup &#x1f449; 一、Vue Transition 简介> Transition 和 TransitionGroup 之间的区别 &#x1f449; 二、<Transition> 组件> 触发 <Transition> 组件的场景&#xff1a;> 基于 CSS 的过渡效果&…

LeetCode:面试题 02.07. 链表相交

&#x1f34e;道阻且长&#xff0c;行则将至。&#x1f353; &#x1f33b;算法&#xff0c;不如说它是一种思考方式&#x1f340; 算法专栏&#xff1a; &#x1f449;&#x1f3fb;123 题解目录 一、&#x1f331;[面试题 02.07. 链表相交](https://leetcode.cn/problems/in…

Python可视化学习——使用JSON进行数据转换、pyecharts模块调用以及可视化案例的介绍(可视化案例数据暂无),柱状图及动态柱状图的构建

数据可视化 可视化效果一&#xff1a;2020年印美日新冠累计确诊人数 2020年是新冠疫情爆发的一年&#xff0c;随着疫情的爆发&#xff0c;国内外确诊人数成了大家关心的热点&#xff0c;相信大家都有看过类似的疫情报告.本案例对印度美国日本三个国家确诊人数的进行了可视化处…

术数基础背诵口诀整理

物象对应 五行方位天干神兽季节气候星宿生成数脏器木东甲乙青龙春风岁八肝火南丙丁朱雀夏热荧惑七心土中戊己&#xff1f;长夏湿镇五脾金西庚辛白虎秋燥太白九肺水北壬癸玄武冬寒辰六肾 口诀&#xff1a;东方甲乙青龙木&#xff0c;南方丙丁朱雀火&#xff0c;戊己勾陈腾蛇土&…

第一章 Java基础 50 道面试题

文章目录 前言匿名内部类访问的局部变量为什么必须要用final修饰? Java基础1、jdk和jre有什么区别&#xff1f;2、final在Java中有什么作用&#xff1f;3、有常量类了为什么还要使用枚举类&#xff1f;4、为什么使用包装类&#xff1f;5、和equals的区别是什么&#xff1f;6、…

Mysql-最左前缀法则以及索引失效情况

最左前缀法则 如果索引了多列&#xff08;联合索引&#xff09;&#xff0c;要遵守最左前缀法则。最左前缀法则指的是查询从索引的最左列开始&#xff0c;并且不跳过索引中的列。如果跳跃某一列&#xff0c;索引将会部分失效(后面的字段索引失效)。 以 tb_user 表为例&#xff…

前端面试题(持续更新中)

【1】null和undefined的区别 同&#xff1a; 1.都是js的基本类型&#xff0c;保存在栈中&#xff0c;表示“无、没有”的意思。 2.if语句中的null和undefined都是false。 var a undefined var b null if (!a) {console.log(undefined is false); } if (!b) {console.log(null…

YOLOv7如何提高目标检测的速度和精度,基于模型结构、数据增强提高目标检测速度

目录 一、基于模型结构的方法1、多尺度训练和测试2、更细的特征图3、重新设计的损失函数 二、基于数据增强的方法1、随机缩放和裁剪2、随机旋转和翻转3、随机亮度和对比度调整4、随机噪声和模糊处理 三、实验结果与分析1、数据集和实验设置2、实验结果的分析和比较 大家好&…

【VM服务管家】VM4.0软件使用_1.1 环境配置类

目录 1.1.1 驱动配置&#xff1a;图像后台切换但前端界面不变的解决方法1.1.2 驱动缺失&#xff1a;格式化工具打开后消失的解决方法1.1.3 环境配置&#xff1a;VM试用版本激活报错的解决方法1.1.4 模块数限制&#xff1a;修改VM最大模块数量1.1.5 开机自启动&#xff1a;VM运行…

【VM服务管家】VM4.0平台SDK_2.3 控件嵌入类

目录 2.3.1 渲染结果&#xff1a;通过绑定流程或模块获取渲染结果的方法2.3.2 渲染控件&#xff1a;渲染控件加载本地图像的方法2.3.3 渲染控件&#xff1a;渲染控件上自定义图形的方法2.3.4 参数控件&#xff1a;参数配置控件绑定模块的方法2.3.5 控件颜色&#xff1a;控件颜色…

【AGC】质量服务数据分析问题

【关键字】 AGC、质量、数据分析 【问题描述】 开发者反馈在应用中集成了AGC的相关服务&#xff0c;在查看平台数据时遇到了一些问题。具体如下所述&#xff1a; 我发现平台的App卸载量每个月都非常高&#xff0c;卸载量/新下载量近80%&#xff0c;很异常&#xff0c;所以想…