代码随想录第45天|70. 爬楼梯,322. 零钱兑换,279.完全平方数

news2024/11/23 2:52:48

 

70. 爬楼梯

开始按感觉做

class Solution {
    public int climbStairs(int n) {
        //第一版按感觉做
        //dp[i]爬到第i个台阶的方法数
        int[] dp=new int[n+1];
        //初始化
        dp[0]=1;
        dp[1]=1;

        
        for(int i=2;i<=n;i++){
            dp[i]=dp[i-1]+dp[i-2];

        }
        return dp[n];
    }
}

改进-用完全背包做

这是背包里求排列问题,即:1、2 步 和 2、1 步都是上三个台阶,但是这两种方法不一样!

需要先遍历背包再遍历物品

class Solution {
    public int climbStairs(int n) {
        //用完全背包做
        //dp[i]爬到第i个台阶的方法数
        int[] dp=new int[n+1];
        int m = 2; //有兩個物品:itme1重量爲一,item2重量爲二

        //初始化
        dp[0]=1;
        for(int j=1;j<=n;j++){//遍历背包
          for(int i=1;i<=m;i++){//遍历物品
              if(j>=i){
                 dp[j]+=dp[j-i];
               }
               
            }
        }
        

        return dp[n];
    }
}

322. 零钱兑换

也是一个完全背包问题,但要注意和518.零钱兑换II的区别,

动规五部曲分析如下:

1.确定dp数组以及下标的含义

dp[j]:凑足金额为j所需钱币的最少个数

2.确定递推公式

凑足金额为j-coins[i]的最少个数是dp[j-coins[i]],那么只需加上一个钱币coins[i]即dp[j-coins[i]]+1就是dp[j],所以dp[j]要取所以dp[j-coins[i]]+1中最小的。递推公式:dp[j]=min(dpp[j-coins[i]]+1,dp[j]);

3.dp数组如何初始化

凑足总金额为0需要的钱币个数一定是0,那么dp[0]=0

其他下标应该初始化为INT_MAX,否则就会在min(dpp[j-coins[i]]+1,dp[j])比较的过程中被初始值覆盖。所以下标非-元素都应该是最大值。

4.遍历顺序

都可以,因为本题求的是最小个数,于集合是组合还是排列没有关系

5.推导dp

先遍历物品再遍历背包,dp[amount]是最终结果

代码实现

class Solution {
    public int coinChange(int[] coins, int amount) {
        //完全背包
        //dp[i]表示凑成金额为i所需的最少硬币个数
        int[] dp=new int[amount+1];
        dp[0]=0;
        for(int i=1;i<dp.length;i++){
            dp[i]=Integer.MAX_VALUE;
        }
        for(int i=0;i<coins.length;i++){
            for(int j=coins[i];j<=amount;j++){
                // if(coins[i]<=j){
                     if (dp[j - coins[i]] != Integer.MAX_VALUE) {//如果是dp[j - coins[i]等于Integer.MAX_VALUE,那么+1后溢出,变成-2147483648
                    dp[j]=Math.min(dp[j],dp[j-coins[i]]+1);

                }
                
            }
        }
        return dp[amount]>amount?-1:dp[amount];
        //或者return dp[amount]==Integer.MAX_VALUE?-1:dp[amount];
    }
}

 这道题的时候卡住了,一开始在for循环里面是写的if(coins[i]<=j)这个条件,然后出现下面用例报错: 后面优化成 if (dp[j - coins[i]] != Integer.MAX_VALUE)

 

279.完全平方数

这道题和322. 零钱兑换思路基本一致

1.dp的定义

dp[i]表示组成和为i的最少完全平方数个数

2.初始化

组成0的最少完全平方数个数是0,其他非0下标初始化为最大数Integer.MAX_VALUE

3.递推公式

 dp[j]=Math.min(dp[j],dp[j-i*i]+1); 

4.遍历顺序

这道题要求的是最少和排列还是组合没有关系,因此先遍历背包还是先遍历物品都是可以的

5.推导dp

代码实现

class Solution {
    public int numSquares(int n) {
        //dp[i]含义:组成和为i的完全平方数的最少数量
        int[] dp=new int[n+1];
        //初始化
        dp[0]=0;//组成和为0的完全平方数是0
        for(int i=1;i<dp.length;i++){
            dp[i]=Integer.MAX_VALUE;
        }
        //
        for(int i=1;i*i<=n;i++){//遍历物品
        for(int j=i*i;j<=n;j++){//遍历背包
         
        if(j>=i*i&&dp[j-i*i]!=Integer.MAX_VALUE){//这个条件加不加都可以过
             dp[j]=Math.min(dp[j],dp[j-i*i]+1);        
        }
        }
        }
        return dp[n];

    }
}

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

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

相关文章

关于点光源踩坑的一点总结

1 点光源不能单独作用域几何体。需要有其他光源的辅助 2 如果你添加了点光源&#xff0c;同时设置的是默认值&#xff0c;那么界面上很可能展示的几何体没有任何光源效 3对于点光源特别注意它的属性光照距的衰退量也就是decay。其默认值为2.&#xff0c;如果我们设置一个较小…

国产编程IDE到底败在哪里?E4A安卓开发,猎码,易语言,火山

最新发现&#xff0c;原来的猎码下载链接都找不到了&#xff0c;再也没有猎码的影子了。 猎码的好处是Jdk,ADK等一起打包了解压自动配置好环境;编绎时各种出错情况提示不人性化&#xff0c;比较难用。 最近出了一款Amix&#xff0c;说是支持跨平台,安卓APP,小程序开发等功能。…

深度思考ES面经

1 推荐文章 2万字详解&#xff0c;吃透 Elasticsearch 2 什么是倒排索引&#xff0c;为什么这么叫&#xff1f; 倒排索引&#xff08;Inverted Index&#xff09;是一种为快速全文搜索而设计的数据结构。它被广泛应用于搜索引擎&#xff0c;其中 Elasticsearch&#xff08;简…

报错处理:Docker镜像无法启动

报错环境&#xff1a; Linux Docker 具体报错&#xff1a; standard_init_linux.go:211: exec user process caused "no such file or directory" 排错思路&#xff1a; 当尝试启动Docker镜像时&#xff0c;如果出现 no such file or directory 的错误&#xff0c;可…

简单记录一下Splunk ES 升级

1: 背景: 现在有些app 产品对splunk ES (enterprise security) 的版本有要求,这个就要求splunk ES 随着Splunk enterprise 也一起升级,下面先列一下各个版本的兼容: Splunk products version compatibility matrix - Splunk Documentation 下面列出的8.2.11 的版本: 2:…

Electron和vue3集成

本篇我们仅实现Electron和vue3通过先运行起vue3项目&#xff0c;再将vue3的url地址交由Electron打开的方案&#xff0c;仅由Electron在vue3项目上套一层壳来达到脱离本机浏览器运行目的 1、参考快速上手 | Vue.js搭建起vue3初始项目 npm install -g vue npm install -g vue/c…

【拯救大学生计划】:我做了一个QQ分组神器

文章目录 &#x1f60a;前言&#x1f603;使用教程第一步&#xff1a;获取好友网名和备注第二步&#xff1a;文件设置第三步&#xff1a;自动选择好友 &#x1f606;停顿问题解决方法&#x1f604;结束语&#x1f4da;资源 专栏Python零基础入门篇&#x1f525;Python网络蜘蛛&…

【改进算法】【IHAOAVOA】天鹰优化算法和非洲秃鹫混合优化算法

目录 1 主要内容 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序复现《IHAOAVOA: An improved hybrid aquila optimizer and African vultures optimization algorithm for global optimization problems》&#xff0c;天鹰优化算法&#xff08;AO&#xff09;和非洲…

智慧工地: 建筑施工一体化信息管理系统源码

智慧工地管理云平台系统是一种利用人工智能和物联网技术来监测和管理建筑工地的系统。它可以通过感知设备、数据处理和分析、智能控制等技术手段&#xff0c;实现对工地施工、设备状态、人员安全等方面的实时监控和管理。 一、智慧工地管理系统让工程施工智能化 1、内容全面&a…

区块链技术与应用 - 学习笔记3【比特币数据结构】

大家好&#xff0c;我是比特桃。本系列笔记只专注于探讨研究区块链技术原理&#xff0c;不做其他违反相关规定的讨论。 区块链技术已被纳入国家十四五规划&#xff0c;在“加快数字发展 建设数字中国”篇章中&#xff0c;区块链被列为“十四五”七大数字经济重点产业之一&#…

(二十五)大数据实战——kafka集群及Kafka-Eagle控制台安装与部署

前言 本节内容我们主要介绍一下搭建kafka集群以及kafka集群的一个web客户端组件Kafka-Eagle的部署安装&#xff0c;使用的kafka版本是kafka_2.12-3.0.0。在搭建kafka集群之前&#xff0c;我们要预先搭建好zookeeper集群&#xff0c;这里作者默认zookeeper的集群环境已经搭建完…

飞行动力学 - 第18节-全机航向稳定性与隐身性 之 基础点摘要

飞行动力学 - 第18节-全机航向稳定性与隐身性 之 基础点摘要 1. 全机航向静稳定性2. 垂尾与隐身3. 参考资料 1. 全机航向静稳定性 机翼贡献 上反角 复杂、极小幅降低 后掠角 增加稳定性 机身贡献 降低稳定性 尾翼贡献 航向静稳定性的最大来源 平尾 类似机翼贡献 垂尾 最大来…

DAMO-YOLO训练自己的数据集,使用onnxruntime推理部署

DAMO-YOLO训练自己的数据集&#xff0c;使用onnxruntime推理部署 DAMO-YOLO 是阿里达摩院智能计算实验室开发的一种兼顾速度与精度的目标检测算法&#xff0c;在高精度的同时&#xff0c;保持了很高的推理速度。 DAMO-YOLO 是在 YOLO 框架基础上引入了一系列新技术&#xff0…

wpf C# 用USB虚拟串口最高速下载大文件 每包400万字节 平均0.7s/M,支持批量多设备同时下载。自动识别串口。源码示例可自由定制。

C# 用USB虚拟串口下载大文件 每包400万字节 平均0.7s/M。支持批量多设备同时下载。自动识别串口。可自由定制。 int 32位有符号整数 -2147483648~2147483647 但500万字节时 write时报端口IO异常。可能是驱动限制的。 之前用这个助手发文件&#xff0c;连续发送&#xff0…

Vim9和其他软件的文本复制、粘贴

大家都知道&#xff1a;在Vim9中使用y和p命令来进行文本的复制和粘贴&#xff0c;今天我来说一说Vim和其他软件之间的文本复制、粘贴操作。 Vim9和其他软件进行复制、粘贴&#xff0c;其原理就是通过系统剪贴板作为中介来执行操作。 一、从Vim9复制文本内容 按住鼠标左键滑出…

局域网内部如何实现文件夹共享

这里写自定义目录标题 1.创建文件夹test2.选择共享--添加用户3.选择高级共享 1.创建文件夹test 2.选择共享–添加用户 3.选择高级共享

《python趣味工具》——酷炫二维码(3)计算机二级考试题

昨天我们学习了如何批量制作合适的二维码&#xff0c;今天来刷几道题练练手&#xff01; 文章目录 1. 制作名单2. 年会抽奖来啦3. 精准查找 1. 制作名单 秋招来了&#xff01;hr部门需要获得简历初筛后的候选者名单&#xff0c;所有候选者简历都按照“小明_xx大学.pdf”命名放…

第8章_瑞萨MCU零基础入门系列教程之SCI SPI

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写&#xff0c;需要的同学可以在这里获取&#xff1a; https://item.taobao.com/item.htm?id728461040949 配套资料获取&#xff1a;https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总&#xff1a; ht…

DBSCAN 揭秘:了解此算法的工作原理

一、说明 DBSCAN 代表 基于密度的带噪声应用程序空间聚类。它是一种流行的聚类算法&#xff0c;用于机器学习和数据挖掘&#xff0c;根据数据集中紧密排列在一起的点与其他点的距离对点进行分组。 二、DBSCAN的算法原理 DBSCAN 的工作原理是将数据划分为由密度较低的区域分隔的…

数据结构与算法:数据结构基础

目录 数组 定义 形式 顺序存储 基本操作 读取元素 更新元素 插入元素 删除元素 扩容 初始化 时机 步骤 优劣势 链表 定义 单向链表 特点 双向链表 随机存储 基本操作 查找节点 更新节点 插入节点 删除元素 数组VS链表 栈与队列 栈 定义 基本操作…