代码随想录Day32 动态规划01 LeetCodeT509 斐波那契数列 T70 爬楼梯 T746 爬楼梯的最小消耗

前言:动态规划基础

动态规划首先可以解决的问题有背包问题,打家劫舍问题,股票问题,子序列问题等,主要是将一个大的问题切分成多个重叠的子问题,所以动态规划一定是上一个状态递推过来的,有一个重要的状态转移方程,但是这也并不是解题的全部,我们将动态规划的题目基本分为五步来完成,

1.搞明白dp数组的含义

2.搞明白状态转移方程怎么写

3.数组如何初始化

4.确定遍历方式

5.在错误的时候打印出dp数组查看分析问题

LeetCode T509 斐波那契数列

题目链接:509. 斐波那契数 - 力扣(LeetCode)

题目思路:

1.dp数组定义

这里我们定义一个数组来表示斐波那契数列

 int[] dp = new int[n+1];

为什么要定义n+1个长度呢?你想想求dp[3]就知道了,前面有三个数字dp[0] = 0,dp[1] = 1      dp[2] = 1.

2.下面明白状态转移方程

我们都知道斐波那契数列式的第n项是由前两个加起来

 dp[i] = dp[i-1]+dp[i-2];

3.初始化数组

初始化前两项,因为这两项要知道才能得到第三项

4.确定遍历方式

由于我们只需要得到第n项,直接for循环即可从前向后遍历

5.打印dp数组

题目代码:

class Solution {public int fib(int n) {int[] dp = new int[n+1];if(n<2){return n;}else{dp[0] = 0;dp[1] = 1;for(int i = 2;i <= n;i++){dp[i] = dp[i-1]+dp[i-2];}return dp[n];}}
}

注:这题也可以使用递归,是递归的经典例题,但是递归太慢了 

LeetCode T70 爬楼梯

题目链接:70. 爬楼梯 - 力扣(LeetCode)

题目思路:

1.搞明白dp数组的含义

dp数组代表到到达第i个台阶有几种方法

2.搞明白状态转移方程怎么写

因为到达第i个台阶可能是两步上来的,也可能是一步上来的,那么我们到第i阶台阶就是第i-1个台阶的方法数加上i-2阶的方法数

这道题的推导公式是这样得来的:
在到达第n层的上一步,我们只有两个选择,走一步,或者走两步。
如果是走一步,我们需要先通过 f(n-1)种方式到达 n-1 层
如果是走两步, 我们需要通过 f(n-2)种方式到达第 n - 2 层
所以综上有 f(n) = f(n-2) + f(n-1)

dp[i] = dp[i-1] + dp[i-2];

3.数组如何初始化

初始化dp[0] = 1,dp[1] = 2

4.确定遍历方式

顺序遍历即可

5.在错误的时候打印出dp数组查看分析问题

题目代码:

class Solution {public int climbStairs(int n) {if(n == 1){return 1;}else if(n == 2){return 2;}int[] dp = new int[n];dp[0] = 1;dp[1] = 2;for(int i = 2;i<n;i++){dp[i] = dp[i-1] + dp[i-2];}return dp[n-1];}
}

LeetCode T746 爬楼梯的最小消耗

题目链接:746. 使用最小花费爬楼梯 - 力扣(LeetCode)

题目思路:

1.搞明白dp数组的含义

这里的dp数组表示的是爬楼梯到本层的最小消耗

2.搞明白状态转移方程怎么写

从前一层爬一层的消耗和前两层爬两层的消耗取最小值就是到达本层的最小消耗

3.数组如何初始化

由于题目说我可以选择在第层或者第一层出发,所以dp[0] = 0;dp[1] = 0

int[] dp = new int[cost.length+1];
dp[i] = Math.min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]);

4.确定遍历方式

从前往后顺序遍历即可,因为上层是围绕着下层结果而产生的

5.在错误的时候打印出dp数组查看分析问题

注:这里爬到的是cost数组后面那一层而不是cost数组的最后一个元素所在位置

题目代码:

class Solution {public int minCostClimbingStairs(int[] cost) {int[] dp = new int[cost.length+1];if(cost.length == 0){return 0;}else if(cost.length == 1){return cost[0];}else{dp[0] = 0;dp[1] = 0;for(int i = 2;i<=cost.length;i++){dp[i] = Math.min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]);}}return dp[cost.length];}
}

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

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

相关文章

MySQL数据xtrabackup物理备份方法

目录 一、物理备份的方式二、xtrabackup物理备份1.安装xtrabackup2.完整备份/恢复流程3.增量备份流程4.差异备份流程5.物理备份总结 一、物理备份的方式 1.完整备份 每次对数据进行完整的备份&#xff0c;即对整个数据库的备份、数据库结构和文件结构的备份&#xff0c;保存的…

【博士每天一篇文献-算法】Overcoming catastrophic forgetting in neural networks

阅读时间&#xff1a;2023-10-24 1 介绍 年份&#xff1a;2016 作者&#xff1a;James Kirkpatrick, Razvan Pascanu, Neil Rabinowitz, Joel Veness, Guillaume Desjardins, Andrei A. Rusu, Kieran Milan, John Quan, Tiago Ramalho, Agnieszka Grabska-Barwinska, Demis H…

ChatGPT从入门到精通

目录 什么是ChatGPT&#xff1f;ChatGPT能帮我干什么&#xff1f;标题在哪里可以使用ChatGPT&#xff1f;什么是ILoveChatGPT&#xff08;IMYAI&#xff09;&#xff1f;标题如何拥有头像&#xff1f;如何获取更多对话次数&#xff1f;!标题如何提问GPT&#xff1f;如何正确地利…

0X01

打开题目 点了几下跳出一个新的页面 点击secret 在上一个页面查看源代码&#xff0c;出现action.php然后点击之后就会在地址栏里面出现end.php 抓包看看&#xff0c;出现secr3t.php huidao开始的页面&#xff0c;访问看看 这是一个PHP脚本&#xff0c;以HTML标签开头。该脚本包…

1300*C. Social Distance(贪心构造)

Problem - 1367C - Codeforces 解析&#xff1a; 统计出所有连续0序列&#xff0c;并且记录其左右两侧有没有1&#xff0c;然后对于四种情况分别判断即可。 #include<bits/stdc.h> using namespace std; int t,n,k; signed main(){scanf("%d",&t);while(…

python使用ffmpeg来制作音频格式转换工具(优化版)

简介:一个使用python加上ffmpeg模块来进行音频格式转换的工具。 日志: 20231030:第一版,设置了简单的UI布局和配色,实现音频转为Mp3、AAC、wav、flac四种格式。可解析音频并显示信息,可设置转换后的保存路径 UI界面: 编程平台:visual studio code 编程语言:python 3…

YugaByteDB -- 全新的 “PostgreSQL“ 存储层

文章目录 0 背景1 架构1.1 Master1.2 TServer1.3 Tablet 2 读写链路2.1 DDL2.2 DML2.3 事务 3 KEY 的设计4 Rocksdb 在 YB 中的一些实践总结 0 背景 YugaByteDB 的诞生也是抓住了 spanner 推行的NewSQL 浪潮的尾巴&#xff0c;以 PG 生态为基础 用C实现的 支持 SQL 以及 CQL 语…

Android---如何同view进行渲染

ViewRootImpl 在 Activity、window 和 View 三者关系之间起着承上启下的作用。一方面&#xff0c;ViewRootImpl 中通过 Binder 通信机制&#xff0c;远程调用 WindowSession 将 View 添加到 Window 中&#xff1b;另一方面&#xff0c;ViewRootImpl 在添加 View 之前&#xff0…

vscode打开settings.json方法

cmd shift p&#xff0c;输入setting Open Workspace Settings 也会打开UI设置界面&#xff1b; Open User Settings (JSON) 会打开用户设置 settings.json 文件&#xff1b; Open Workspace Settings (JSON) 会打开工作区设置 settings.json 文件 vscode存在两种设置 sett…

Rust编程基础之变量与可变性

1.Rust变量 在Rust语言中, 变量默认是不可改变的(immutable), 这是Rust提供给我们的众多优势之一, 让我们可以充分利用Rust提供的安全性和简单并发性来编写代码。 当变量不可变时, 一旦值被绑定在一个名称上, 就不能改变这个值。下面是一段代码的例子: fn main() {let x 1;…

Panda3d 介绍

Panda3d 介绍 文章目录 Panda3d 介绍Panda3d 的安装Panda3d 的坐标系统介绍Panda3d 的运行Panda3d 加载一个熊猫父节点和子节点之间的关系 验证Panda3d 的坐标系统X 轴的平移Y 轴的平移Z 轴的平移X 轴的旋转Y 轴的旋转Z 轴的旋转 Panda3D是一个3D引擎:一个用于3D渲染和游戏开发…

[Linux]线程池

[Linux]线程池 文章目录 [Linux]线程池线程池的概念线程池的优点线程池的应用场景线程池的实现 线程池的概念 线程池是一种线程使用模式。线程池是一种特殊的生产消费模型&#xff0c;用户作为生产者&#xff0c;线程池作为消费者和缓冲区。 线程过多会带来调度开销&#xff0c…

Generalized Zero-Shot Learning With Multi-Channel Gaussian Mixture VAE

L D A _{DA} DA​最大化编码后两种特征分布之间的相似性 辅助信息 作者未提供代码

1400*C. Element Extermination(贪心规律)

Problem - 1375C - Codeforces 解析&#xff1a; 可以发现&#xff0c;最左端的数字&#xff0c;无论删除自己还是下一个&#xff0c;这个位置的值都不会变小。 同理&#xff0c;最右端位置的值都不会变大。 所以当最后剩余两个数字的时候&#xff0c;只有左端小于右端数字&…

【经典面试】87 字符串解码

字符串解码 题解1 递归(程序栈)——形式语言自动机(LL(1)) : O(S)另一种递归(直观) 题解2 2个栈(逆波兰式)1个栈(参考官方&#xff0c;但是不喜欢) 给定一个经过编码的字符串&#xff0c;返回它解码后的字符串。 编码规则为: k[encoded_string]&#xff0c;表示其中方括号内部的…

深入探究深度学习、神经网络与卷积神经网络以及它们在多个领域中的应用

目录 1、什么是深度学习&#xff1f; 2、深度学习的思想 3、深度学习与神经网络 4、深度学习训练过程 4.1、先使用自下上升非监督学习&#xff08;就是从底层开始&#xff0c;一层一层的往顶层训练&#xff09; 4.2、后自顶向下的监督学习&#xff08;就是通过带标签的数…

文件管理怎么清内存?效率提升一倍

定期清理文件管理可以释放存储空间和提高系统性能。随着时间的推移&#xff0c;手机中可能会存储大量无用的数据&#xff0c;例如缓存、垃圾文件等&#xff0c;导致系统运行缓慢。那么如何清理文件管理的内存呢&#xff1f;下面介绍三种方法。 一、搜索无用的文件夹进行清理 1…

【Bug—eNSP】华为eNsp路由器设备启动一直是0解决方案!

目录 一、项目场景 二、问题描述 三、原因分析 四、解决方案 注意&#

(二开)Flink 修改源码拓展 SQL 语法

1、Flink 扩展 calcite 中的语法解析 1&#xff09;定义需要的 SqlNode 节点类-以 SqlShowCatalogs 为例 a&#xff09;类位置 flink/flink-table/flink-sql-parser/src/main/java/org/apache/flink/sql/parser/dql/SqlShowCatalogs.java 核心方法&#xff1a; Override pu…

高阶数据结构学习 —— 图(1)

文章目录 1、并查集2、了解图3、邻接矩阵4、压缩路径5、基本概念6、邻接表 1、并查集 并查集是一个森林&#xff0c;是由多棵树组成的。这相当于整套数据&#xff0c;分成多个集合。查找有交集的集合们&#xff0c;会把它们合并起来&#xff0c;所以叫并查集。 一开始拿到的是…