代码随想录算法训练营第38天|● 理论基础 ● 509. 斐波那契数● 70. 爬楼梯 ● 746. 使用最小花费爬楼梯

动态规划理论基础

动态规划,英文:Dynamic Programming,简称DP,如果某一问题有很多重叠子问题,使用动态规划是最有效的。

所以动态规划中每一个状态一定是由上一个状态推导出来的,这一点就区分于贪心,贪心没有状态推导,而是从局部直接选最优的,


动态规划做题步骤

  1. 确定dp数组(dp table)以及下标的含义
  2. 确定递推公式
  3. dp数组如何初始化
  4. 确定遍历顺序
  5. 举例推导dp数组

动态规划做题debug

  1. 找问题的最好方式就是把dp数组打印出来
  2. 做动规的题目,写代码之前一定要把状态转移在dp数组的上具体情况模拟一遍,心中有数,确定最后推出的是想要的结果

斐波那契数

509. 斐波那契数 - 力扣(LeetCode)

本题为动态规划入门题,根据题目进行模拟即可

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

dp[i]的定义为:第i个数的斐波那契数值是dp[i]

2.确定递推公式

为什么这是一道非常简单的入门题目呢?

因为题目已经把递推公式直接给我们了:状态转移方程 dp[i] = dp[i - 1] + dp[i - 2];

3.dp数组如何初始化

题目中把如何初始化也直接给我们了,如下:

arr[0]=0;

arr[1]=1;

4.确定遍历顺序

从递归公式dp[i] = dp[i - 1] + dp[i - 2];中可以看出,dp[i]是依赖 dp[i - 1] 和 dp[i - 2],那么遍历的顺序一定是从前到后遍历的

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

爬楼梯

70. 爬楼梯 - 力扣(LeetCode)

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

          到达第i 层有dp[i]种方法

      2.确定递推公式

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

      3.dp数组如何初始化

           dp[1]=1;  

          dp[2]=1;

     4.确定遍历顺序

         从前向后遍历

代码:

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

使用最小花费爬楼梯 

746. 使用最小花费爬楼梯 - 力扣(LeetCode)

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

    dp[i]的定义:到达第i台阶所花费的最少体力为dp[i]。  

2.确定递推公式

      dp[i - 1] 跳到 dp[i] 需要花费 dp[i - 1] + cost[i - 1]。

     dp[i - 2] 跳到 dp[i] 需要花费 dp[i - 2] + cost[i - 2]。

    那么dp[i] = min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2]);

3.dp数组初始化

由题目可以知道你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。所以从0或1开始不需要花钱

dp[0]=0;dp[1]=0;

4.遍历顺序

从前向后

class Solution {public int minCostClimbingStairs(int[] cost) {int[] dp = new int[cost.length + 1];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.mzph.cn/web/28919.shtml

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

相关文章

VB.net与C# 调用InitializeComponent的区别

VB.NET与C# 调用InitializeComponent的区别 在VB.NET和C#中&#xff0c;InitializeComponent 方法的调用方式有所不同。 C#: 在C#中&#xff0c;InitializeComponent 方法通常是在构造函数中显式调用的。它用于初始化窗体和控件的属性。代码示例如下&#xff1a; public pa…

宁德等保测评公司有哪些?位于哪里?

据悉2024年中国百强城市就包含福建宁德。宁德市&#xff0c;福建省辖地级市&#xff0c;GDP快速增长&#xff0c;拥有众多自然风光和历史文化名镇&#xff0c;是一个生活幸福的城市。这里的小伙伴在问&#xff0c;宁德等保测评公司有哪些&#xff1f;位于哪里&#xff1f; 宁德…

想上币的项目方怎么去选择交易所

在区块链和加密货币蓬勃发展的今天&#xff0c;许多项目方都渴望通过交易所上线其代币&#xff0c;以扩大影响力、提升流动性和市场认可度。然而&#xff0c;选择合适的交易所并非易事&#xff0c;它关乎项目的未来发展和市场地位。那么&#xff0c;对于有上币意向的项目来说&a…

uniapp开发微信小程序预览文件+图片+嵌套网页

1、预览文件 <view click"preview(文件地址)">点击预览 </view>// 预览 const preview (middle) > {uni.downloadFile({url: middle,//middle为调用接口返回的文件地址success: (data) > {uni.saveFile({tempFilePath: data.tempFilePath, //临时…

Thinkphp起名网宝宝起名网站源码

Thinkphp起名网宝宝起名网站源码 源码介绍 1.宝宝在线起名 2.八字起名&#xff0c;周易取名 3.一对一起名 5.支持手机wap 链接数据库地址&#xff1a;Application\Common\Conf 修改里面config.php数据库连接&#xff0c;导入sm.sql数据库文件即可 伪静态用thinkphp 后台…

ubuntu 深度学习服务器搭建

apt-get install openssh-server -y systemctl enable ssh apt-get install net-tools -y apt-get install vim -y VNC 安装&#xff1a;https://blog.csdn.net/qq_45516773/article/details/132072500 显卡驱动下载&#xff1a;Official Drivers | NVIDIA 安装前准备&#x…

接口测试的几种方法

其实无论用那种测试方法&#xff0c;接口测试的原理是通过测试程序模拟客户端向服务器发送请求报文&#xff0c;服务器接收请求报文后对相应的报文做出处理然后再把应答报文发送给客户端&#xff0c;客户端接收应答报文这一个过程。 方法一、用LoadRunner实现接口测试 大家都…

软考高级论文真题“论湖仓一体架构及其应用”

论文真题 随着5G、大数据、人工智能、物联网等技术的不断成熟&#xff0c;各行各业的业务场景日益复杂&#xff0c;企业数据呈现出大规模、多样性的特点&#xff0c;特别是非结构化数据呈现出爆发式增长趋势。在这一背景下&#xff0c;企业数据管理不再局限于传统的结构化OLTP…

【Android面试八股文】你能说一说反射为什么这么慢?

文章目录 一、Java 反射效率低主要原因二、优化反射速度1. 缓存反射对象2. 降低反射调用频率3. 使用 `MethodHandle` 和 `MethodHandles.Lookup`4. 使用字节码生成工具5. 混合使用反射和直接调用6. 提高 JVM 优化水平一、Java 反射效率低主要原因 虽然反射提供了灵活性和动态性…

持续总结中!2024年面试必问 20 道设计模式面试题(二)

上一篇地址&#xff1a;持续总结中&#xff01;2024年面试必问 20 道设计模式面试题&#xff08;一&#xff09;-CSDN博客 三、请描述单例模式&#xff08;Singleton Pattern&#xff09;及其使用场景。 单例模式是一种创建型设计模式&#xff0c;用于确保一个类只有一个实例…

持PMP证书可以免考申请CSPM-2国标证书!

一提到项目管理的专业认证&#xff0c;大家首先想到的肯定是以PMP为核心的PMI体系认证。当然也有BSI和IPMP等其他体系认证&#xff0c;但都是从国外引进的专业认证&#xff0c;我国始终缺少符合中国特色项目管理环境下的项目管理专业认证体系。 如今&#xff0c;更符合中国国情…

mysql面试题 Day2

1 长文本如何存储&#xff1f; 可以使用Text存储 TINYTEXT(255长度) TEXT(65535) MEDIUMTEXT&#xff08;int最大值16M&#xff09; LONGTEXT(long最大值4G) 2 大段文本存储如何设计表结构&#xff1f; 分表存储 分表后多段存储 3 大段文本查找时如何建立索引&#xff1…

Novartis诺华制药社招综合能力性格动机问卷入职测评笔试题库答案及包过助攻

【华东同舟求职】由资深各行业从业者建立的一站式人才服务网络平台&#xff0c;现阶段目标是“提升全市场各行业岗位信息的流动性和透明度”。我们接受众多行业机构的直接委托发布&#xff0c;并尽力通过各种方法搜寻高价值岗位信息。事实上&#xff0c;我们以发现不为人知的优…

经验分享,xps格式转成pdf格式

XPS 是一种电子文档格式、后台打印文件格式和页面描述语言。有时候微软默认打印机保存的是xps格式&#xff0c;我们如何转换为pdf格式呢&#xff0c;这里分享一个免费好用的网站&#xff0c;可以实现。 网站&#xff1a;https://xpstopdf.com/zh/ 截图&#xff1a;

HarmoneyOS星河版 安装和启动

一、下载和安装DevEco Studio 官网链接&#xff1a;OpenAtom OpenHarmony 1.1 找到对应的操作系统进行下载 创建安装Harmony的文件夹&#xff1a; 1.2 下载后进行安装 1.3 分别安装Node、Ohpm、SDK 分别安装Node、Ohpm和SDK 二、.创建一个新项目并运行 2.1 选择[OpenHarmon…

代码解读 | Hybrid Transformers for Music Source Separation[07]

一、背景 0、Hybrid Transformer 论文解读 1、代码复现|Demucs Music Source Separation_demucs架构原理-CSDN博客 2、Hybrid Transformer 各个模块对应的代码具体在工程的哪个地方 3、Hybrid Transformer 各个模块的底层到底是个啥&#xff08;初步感受&#xff09;&#xff1…

数据安全交换系统 与网闸有什么区别?

数据安全交换系统是指用于安全地传输、共享和交换数据的一种系统。这样的系统通常包括一系列安全性和隐私保护功能&#xff0c;确保数据在传输和存储过程中不会被未经授权的用户访问、泄露或篡改。 数据安全交换系统和网闸在功能和定位上有一些区别&#xff1a; 功能&#xff…

短剧系统搭建全攻略:功能齐全,一步到位

前言 近年来&#xff0c;短剧系统以其独特魅力&#xff0c;成为大众消遣娱乐的热门选择。简单来说&#xff0c;短剧系统就是用来看短剧的小程序&#xff0c;它汇集了丰富多彩的短剧资源&#xff0c;让观众随时随地享受观影乐趣。本文将为你详细解析短剧系统的搭建全攻略&#…

ROS系统中解析通过CAN协议传输的超声波传感器数据

CAN Bus接口设置&#xff1a;确保你的ROS系统可以通过CAN Bus接口与外部设备通信。这可能需要CAN卡或CAN适配器&#xff0c;以及相应的驱动程序和库。 CAN消息接收&#xff1a;配置ROS节点来监听特定的CAN ID&#xff0c;这通常是超声波传感器的标识符。 数据解析&#xff1a…

C++日志库 glog入门

glog&#xff08;Google Logging Library&#xff09;是由Google开源的一款C日志库&#xff0c;用于方便地记录日志信息。它支持四个级别的日志&#xff08;INFO、WARNING、ERROR、FATAL&#xff09;&#xff0c;并且可以将日志输出到文件和控制台&#xff0c;方便调试和问题追…