代码随想录刷题day38|斐波那契数爬楼梯最小花费爬楼梯

news2024/10/10 10:28:52

文章目录

  • day38学习内容
  • 一、动态规划理论基础
    • 1.1、动态规划理论基础的几个关键概念:
    • 1.2、动态规划五部曲
  • 二、斐波那契数
    • 2.1、动态规划五部曲
      • 2.1.1、 确定dp数组(dp table)以及下标的含义
      • 2.1.2、确定递推公式
      • 2.1.3、 dp数组如何初始化
      • 2.1.4、确定遍历顺序
      • 2.1.5、计算并返回最终结果
    • 2.2、代码
      • 2.2.1、为什么dp[0] = 0?
  • 三、爬楼梯
    • 3.1、动态规划五部曲
      • 3.1.1、 确定dp数组(dp table)以及下标的含义
      • 3.1.2、确定递推公式
      • 3.1.3、 dp数组如何初始化
      • 3.1.4、确定遍历顺序
      • 3.1.5、计算并返回最终结果
    • 3.2、代码
  • 四、最小花费爬楼梯
    • 4.1、动态规划五部曲
      • 4.1.1、 确定dp数组(dp table)以及下标的含义
      • 4.1.2、确定递推公式
      • 4.1.3、 dp数组如何初始化
      • 4.1.4、确定遍历顺序
      • 4.1.5、计算并返回最终结果
    • 4.2、代码
  • 总结
    • 1.感想
    • 2.思维导图


day38学习内容

day37主要内容

  • 斐波那契数
  • 爬楼梯
    最小花费爬楼梯

声明
本文思路和文字,引用自《代码随想录》

一、动态规划理论基础

1.1、动态规划理论基础的几个关键概念:

  1. 最优子结构(Optimal Substructure):一个问题的最优解包含其子问题的最优解。这意味着我们可以通过组合子问题的最优解来构造问题的最优解。

  2. 边界条件(Boundary Conditions):问题的最小子集,它们是无法再分解的,并且解决方案是显而易见的。这些条件是动态规划算法的起点。

  3. 状态转移方程(State Transition Equation):这是动态规划的核心,定义了从一个状态到另一个状态的转移规则。一个“状态”通常描述了解决问题的某个阶段,而状态转移方程描述了这些阶段如何转化。

  4. 备忘录法(Memoization):一种优化技术,用于通过存储之前计算的结果(即“记忆”这些结果)来避免重复计算。这通常用于递归解决方案中,以提高效率。

  5. 自底向上(Bottom-Up Approach):与递归(通常是自顶向下的)相反,自底向上的方法首先解决子问题,然后合并这些解决方案来解决更大的问题。这通常涉及到使用迭代而非递归,并且使用表格(数组或其他数据结构)来存储中间结果。

1.2、动态规划五部曲

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

二、斐波那契数

509.原题链接

2.1、动态规划五部曲

2.1.1、 确定dp数组(dp table)以及下标的含义

- dp[i]表示第i个数,和为dp[i]

2.1.2、确定递推公式

题意已经告诉你了。dp[i] = dp[i - 1] + dp[i - 2];,不用自己推导了。

2.1.3、 dp数组如何初始化

很明显。dp[0] = 0
dp[1] = 1

2.1.4、确定遍历顺序

从前向后遍历,没啥好说的

2.1.5、计算并返回最终结果

return dp[i]即可

2.2、代码

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

2.2.1、为什么dp[0] = 0?

看题目。。
在这里插入图片描述


三、爬楼梯

70.原题链接

3.1、动态规划五部曲

3.1.1、 确定dp数组(dp table)以及下标的含义

- dp[i]表示到达第i个楼梯,有dp[i]种方法

3.1.2、确定递推公式

3.1.3、 dp数组如何初始化

很明显。dp[0] = 1
dp[1] = 1

3.1.4、确定遍历顺序

从前向后遍历,没啥好说的

3.1.5、计算并返回最终结果

return dp[i]即可

3.2、代码

class Solution {
    public int climbStairs(int n) {
        if (n < 2) {
            return n;
        }
        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];
    }
}

四、最小花费爬楼梯

746.原题链接

4.1、动态规划五部曲

4.1.1、 确定dp数组(dp table)以及下标的含义

- dp[i] 表示到达第i层楼梯,最小成本为dp[i]。

4.1.2、确定递推公式

推导过程

  1. 定义状态:首先,我们定义 dp[i] 为到达第 i 阶楼梯所需的最小成本。

  2. 分析选择:对于每一阶楼梯 i(除了第一和第二阶),我们可以从第 i-1 阶或第 i-2 阶到达。这意味着到达第 i 阶的最小成本取决于:

    • 从第 i-1 阶上来的成本(即 dp[i-1] 加上 cost[i]),以及
    • 从第 i-2 阶上来的成本(即 dp[i-2] 加上 cost[i])。
  3. 确定状态转移方程:因此,为了计算 dp[i],我们需要选择这两种方式中成本更低的一种,即:
    dp[i] = min(dp[i-1], dp[i-2]) + cost[i]
    这里 dp[i-1] + cost[i] 代表了通过先支付到达第 i-1 阶的成本,再支付第 i 阶的成本来到达第 i 阶的总成本。类似地,dp[i-2] + cost[i] 代表了先支付到达第 i-2 阶的成本,再支付第 i 阶的成本的总成本。

4.1.3、 dp数组如何初始化

很明显。对于初始阶梯 dp[0]dp[1],因为没有前面的阶梯可以选择,所以它们的成本直接等于 cost[0]cost[1]

4.1.4、确定遍历顺序

从前向后遍历,没啥好说的

4.1.5、计算并返回最终结果

返回达到倒数第一阶和倒数第二阶中最小成本的那一个,因为这两个位置都可以直接到达楼梯顶端。
return Math.min(dp[cost.length - 1], dp[cost.length - 2]);
return Math.min(dp[cost.length - 1], dp[cost.length - 2])为什么不用加cost[i]

因为

  1. 问题定义:数组 cost 中的每个元素代表爬上对应阶梯的成本。一旦支付了爬上某阶梯的成本,你就可以站在那一阶上。而目标是以最小的成本到达楼梯的顶部,顶部位于 cost 数组之外的位置。

  2. 最终目标:考虑到你可以一次爬一阶或两阶,到达顶部的最后一步可以从倒数第一阶开始,也可以从倒数第二阶开始。这意味着在实际达到楼梯顶部时,并不需要支付额外的成本,因为你已经站在了可以直接到达顶部的阶梯上。

  3. 成本已包括:当计算 dp 数组时,每个 dp[i] 已经包含了到达第 i 阶所需的全部成本,包括爬上第 i 阶的成本。所以,到达倒数第一阶或倒数第二阶的成本已经计算在内,不需要再额外添加成本来完成最后一步的动作。

综上所述,选择 dp[cost.length - 1]dp[cost.length - 2] 中的最小值作为最终结果,是因为这两个值已经反映了到达楼梯顶部(实际是站在能够一步到达顶部的最后两阶楼梯上)的全部必要成本。这个设计巧妙地避免了在问题解决方案的最后一步中不必要的成本计算,直接利用了动态规划数组中的结果来找出达到楼梯顶部的最小成本。

4.2、代码

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

总结

1.感想

  • 动态规划的第一天,加油

2.思维导图

本文思路引用自代码随想录,感谢代码随想录作者。-

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

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

相关文章

带你了解万向锁与欧拉角

万向锁与欧拉角 附赠自动驾驶学习资料和量产经验&#xff1a;链接 前言 上一篇中我们讲了欧拉角与旋转变化&#xff0c;最后留了一个悬念&#xff0c;就是欧拉角在俯仰角为90时会出现万向锁现象&#xff0c;这是欧拉角表征飞行器姿态的一个局限性&#xff0c;今天我们就来谈谈…

Spring-01

Spring 1.Spring是什么? spring是一个开源的Java应用框架&#xff0c;它提供了一套全面的基础设施支持 2.Spring框架的主要特点 1&#xff09;依赖注入&#xff08;Dependency Injection&#xff0c;DI&#xff09; 2&#xff09;面向切面编程&#xff08;AOP&#xff09…

智慧旅游中数据可视化的革新作用

在数字化浪潮席卷全球的今天&#xff0c;数据可视化技术已成为链接信息与用户的重要桥梁&#xff0c;尤其在智慧旅游领域&#xff0c;它的作用更是日益凸显。随着智慧旅游的概念越来越被重视&#xff0c;数据可视化成为其提供高效、直观服务的关键手段之一。本文将探讨数据可视…

K8S安装和部署(kubeadmin安装1主2从)

这里用kubeadmin方式进行安装部署 1. 准备三台服务器 服务器地址 节点名称 192.168.190.200 master 主 192.168.190.201 node1 从 192.168.190.202 node2 从 2. 主机初始化&#xff08;所有主机&#xff09; 2.1根据规划设置主机名 #切换到192.168.190.200 hostnamectl…

每天五分钟卷积神经网络:如何基于滑动窗口技术完成目标的检测?

汽车检测算法 现在我们想要构建一个汽车检测算法,我们希望输入到算法中一张图片,算法就可以帮助我们检测出这张图片中是否有汽车。 数据集 首先创建一个标签训练集,x是样本,y是标签。我们的训练集最好是被剪切过的图片,剪掉汽车以外的部分,使汽车居于中间位置,就是整张…

深入解析Java继承机制:面向对象编程的核心探究【Java面试题】

作为一名对技术充满热情的学习者&#xff0c;我一直以来都深刻地体会到知识的广度和深度。在这个不断演变的数字时代&#xff0c;我远非专家&#xff0c;而是一位不断追求进步的旅行者。通过这篇博客&#xff0c;我想分享我在某个领域的学习经验&#xff0c;与大家共同探讨、共…

如何看待各省纷纷成立数据管理局?

截至2024年1月&#xff0c;我国今年已有11个省市级数据局揭牌成立&#xff0c;包括江苏省数据局、四川省数据局、内蒙古自治区政务服务与数据管理局、上海市数据局、云南省数据局、青海省数据局、河北省数据和政务服务局、湖南省数据局、广东省政务服务和数据管理局、天津市数据…

PCI总线管脚定义(引脚定义)

文章目录 1&#xff1a; 参考资料的链接2: 图片说明3&#xff1a;PCI文字说明每日好图 1&#xff1a; 参考资料的链接 PCI bus pinout PCI三种标准引脚信号定义 PCI bus pinout 2: 图片说明 A面和B面正反 PCI Universal Card 32/64 bit ----------------------------------…

docker 的mysql容器中没有mysqlbinlog

docker 的mysql容器中没有mysqlbinlog bug信息原因&#xff1a;阉割版mysql容器&#xff0c;构建者没有把mysqlbinlog当成必需工具&#xff0c;去掉了解决方法&#xff1a;验证成功删除无用的文件5.7开启binlog&#xff0c;&#xff08;8 的默认开启了&#xff09;5.7版本的mys…

【论文阅读】ELA: Efficient Local Attention for Deep Convolutional Neural Networks

&#xff08;ELA&#xff09;Efficient Local Attention for Deep Convolutional Neural Networks 论文链接&#xff1a;ELA: Efficient Local Attention for Deep Convolutional Neural Networks (arxiv.org) 作者&#xff1a;Wei Xu, Yi Wan 单位&#xff1a;兰州大学信息…

高效测量“芯”搭档 | ACM32激光测距仪应用方案

激光测距仪概述 激光测距仪是利用激光对目标的距离进行准确测定的仪器。激光测距仪在工作时向目标射出一束很细的激光&#xff0c;由光电元件接收目标反射的激光束&#xff0c;计时器测定激光束从发射到接收的时间&#xff0c;计算出从观测者到目标的距离。激光测距仪分为手持激…

4核8G服务器租用优惠价格418元一年,可买3年

京东云4C8G云服务器优惠价格418元1年、1899元三年&#xff0c;配置为&#xff1a;轻量云主机4C8G-180G SSD系统盘-5M带宽-500G月流量&#xff0c;京东云主机优惠活动 atengyun.com/go/jd 可以查看京东云服务器详细配置和精准报价单&#xff0c;活动打开如下图&#xff1a; 京东…

【MySQL探索之旅】MySQL数据表的增删查改——约束

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 《MySQL探索之旅》 |《Web世界探险家》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更…

魔众众包系统——革命性的在线任务接单平台

魔众众包系统&#xff0c;一个革命性的在线任务接单平台&#xff0c;最新版本为v1.9.0&#xff0c;发布日期为2024年3月10日。这个平台不仅提供了一个高效的任务分配和管理环境&#xff0c;还通过其先进的技术架构&#xff0c;确保了系统的稳定性和可靠性。无论是对于企业还是个…

金蝶云星空和旺店通·旗舰奇门接口打通对接实战

金蝶云星空和旺店通旗舰奇门接口打通对接实战 对接源平台:金蝶云星空 金蝶K/3Cloud&#xff08;金蝶云星空&#xff09;是移动互联网时代的新型ERP&#xff0c;是基于WEB2.0与云技术的新时代企业管理服务平台。金蝶K/3Cloud围绕着“生态、人人、体验”&#xff0c;旨在帮助企业…

『大模型笔记』提示工程、微调和RAG之间对比

提示工程、微调和RAG之间对比 文章目录 一. 提示工程、微调和RAG之间对比二. 参考文章文章:Prompt Engineering vs Finetuning vs RAG一. 提示工程、微调和RAG之间对比 Prompt EngineeringFinetuning

2024年MathorCup数学建模思路B题思路分享

文章目录 1 赛题思路2 比赛日期和时间3 组织机构4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题 5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 比赛日期和时间 报名截止时间&#xff1a;2024…

综合实验1

一、配置IP地址 [AR1]int g0/0/0 [AR1-GigabitEthernet0/0/0]ip add 192.168.1.254 24 [AR1-GigabitEthernet0/0/0]int se4/0/0 [AR1-Serial4/0/0]ip add 15.1.1.1 24 [AR1-Serial4/0/0] [AR2]int g0/0/0 [AR2-GigabitEthernet0/0/0]ip add 192.168.2.254 24 [AR2-Giga…

阿里云2核4G云服务器165元一年,ECS u1优惠价格199元一年

阿里云2核4G服务器租用优惠价格&#xff0c;轻量2核4G服务器165元一年、u1服务器2核4G5M带宽199元一年、云服务器e实例30元3个月&#xff0c;活动链接 aliyunfuwuqi.com/go/aliyun 活动链接如下图&#xff1a; 阿里云2核4G服务器优惠价格 轻量应用服务器2核2G4M带宽、60GB高效…

【python】深入探讨flask是如何预防CSRF攻击的

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…