当前位置: 首页 > news >正文

代码随想录算法训练营第三十八天| 509. 斐波那契数,70. 爬楼梯,746. 使用最小花费爬楼梯

题目与题解

参考资料:动态规划基础

动态规划五步曲 

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

509. 斐波那契数

题目链接:​​​​​​​509. 斐波那契数

代码随想录题解:509. 斐波那契数

视频讲解:手把手带你入门动态规划 | LeetCode:509.斐波那契数_哔哩哔哩_bilibili

解题思路:

        斐波那契数是最经典的递归/迭代题,迭代方法对应的就是动态规划。

        已知F(0), F(1)以及F(n) = F(n-1)+F(n-2),直接就可以用循环逐一写出F(n)的值了。这里因为不需要求1-n之间每个数的斐波那契数,所以简单一点,不用数组记录结果,只要用临时变量记录F(n-1)和F(n-2)即可。

class Solution {public int fib(int n) {if (n <= 1) return n;int pre1 = 0, pre2 = 1;int cur = 0;for (int i = 2; i < n; i++) {cur = pre1 + pre2;pre1 = pre2;pre2 = cur;}return cur;}
}

看完代码随想录之后的想法 

        按照随想录的五步法做练习:

  1. 确定dp数组(dp table)以及下标的含义:dp[i]表示数i的斐波那契数
  2. 确定递推公式:题目已经给了,dp[i]=dp[i-1]+dp[i-2]
  3. dp数组如何初始化:同样题目已经给了,dp[0] = 0, dp[1] = 1
  4. 确定遍历顺序:当前数的斐波那契数由其前两个数相加直接得到,所以按顺序遍历即可
  5. 举例推导dp数组:随意用一串斐波那契数带入递推公式 - 0,1,1,2,3,5,8...,符合要求

遇到的困难

        无

70. 爬楼梯

题目链接:​​​​​​​70. 爬楼梯

代码随想录题解:70. 爬楼梯

视频讲解:带你学透动态规划-爬楼梯(对应力扣70.爬楼梯)| 动态规划经典入门题目_哔哩哔哩_bilibili

解题思路:

        这题其实其实就是求斐波那契数的变种,因为爬到当前楼梯的方法,要么是从前一个楼梯爬一级,要么是从再前一个楼梯爬两级,除此之外没有别的选择了,所以递推公式仍然是F(n) = F(n-1)+F(n-2),不一样的地方在于初始值,第一个数F(1)=1,第二个数F(2)=2。

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

看完代码随想录之后的想法 

        附上拓展题,一次最多可以爬m个台阶

class Solution {
public:int climbStairs(int n) {vector<int> dp(n + 1, 0);dp[0] = 1;for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) { // 把m换成2,就可以AC爬楼梯这道题if (i - j >= 0) dp[i] += dp[i - j];}}return dp[n];}
};

遇到的困难

        无

746. 使用最小花费爬楼梯 

题目链接:746. 使用最小花费爬楼梯 

代码随想录题解:​​​​​​​746. 使用最小花费爬楼梯 

视频讲解:动态规划开更了!| LeetCode:746. 使用最小花费爬楼梯_哔哩哔哩_bilibili

解题思路:

        这题比普通爬楼梯略复杂了一些,除了一次可以爬一步或者两步的基础要求外,还有需要花费最小代价,所以爬楼梯时哪些台阶走一步,哪些台阶走两步,就涉及到了选择的问题。但是,这里还是可以抽象化为动态规划去做,用dp[i]记录爬到当前台阶所需的最小花费,那么dp[i]要么是从dp[i-1]走一步得到,要么是从dp[i-2]走两步得到,所以dp[i] = min(dp[i-1]+cost[i-1], dp[i-2]+cost[i-2])。

        这里需要注意一下,爬上第0级和第1级台阶是不需要代价的,所以初始化dp[0]=dp[1]=0。

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

看完代码随想录之后的想法 

        思路是一样的,这题同样不难,不严格按照五步分析也能写出来。但是后面题目变难了就不好说了。

遇到的困难

        一开始初始化dp[0]和dp[1]的时候写成了cost[0]cost[1],怎么着都不对,然后就用了一个数列举例,逐一写出如何得到dp[i]的结果,然后才意识到第0,1级台阶不需要cost就可以上去。所以做错的时候直接举例最直观。

今日收获

        初步学习了动态规划方法的五部曲,用简单题实践了一下,目前感觉尚可。

相关文章:

代码随想录算法训练营第三十八天| 509. 斐波那契数,70. 爬楼梯,746. 使用最小花费爬楼梯

题目与题解 参考资料&#xff1a;动态规划基础 动态规划五步曲 确定dp数组&#xff08;dp table&#xff09;以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组 509. 斐波那契数 题目链接&#xff1a;​​​​​​​509. 斐波那契数 代码随想录题解&am…...

视频中会动的进度条

视频中会动的进度条 1.成果展示&#xff1a;2.步骤&#xff1a; 1.成果展示&#xff1a; 2.步骤&#xff1a;...

C++高级特性:柯里化过程与std::bind(六)

1、柯里化过程 1.1、operator()的引入 现在需要完成这样一个需求&#xff1a;有一个函数每次调用返回的结果不一样。例如&#xff1a;两次调用的返回值都不一样那么就可以达到这种目的 1.1.1、简单点的写法 可以给一个全局的变量&#xff08;静态变量&#xff09;&#xff…...

vmware虚拟机补救

更新了虚拟机里面工具和资料&#xff0c;进行了磁盘整理和压缩&#xff0c;虚拟机运行进不去系统了。 网站找的修复方法均不可行。补救措施&#xff1a;利用DiskGenius.exe&#xff08;要用高版本不然复制的时候就知道了&#xff09; DG1342.rar - 蓝奏云 加载虚拟硬盘 2008x…...

数据结构(算法)

总结&#xff0c;建议看EXCEL的《算法》页签&#xff0c;不然感觉有点乱 备注原理/步骤时间复杂度空间复杂度串的应用模式匹配简单/暴力O(mn) KMP  O(mn) 树的应用树哈夫曼树1、带权路径长度WPL 2、外部排序-最佳归并树1、哈夫曼树的度&#xff0c;只有0和m&#xff08;m叉…...

SpringCloud集成SkyWalking链路追踪并收集日志2

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…...

纯小白蓝桥杯备赛笔记--DAY4(数学数据结构图论)

文章目录 数学质因数分解辗转相除法求最大公约数最小公倍数&#xff1a;快速幂乘法逆元费马小定理 逆元乘法逆元素数判定与埃式筛法朴素素数判定法埃式筛法 图论并查集T3:真题--合根植物DijkstraFloyd 基础算法递归&#xff0c;循环&#xff0c;前缀和&#xff0c;差分STL 数学…...

python 最简单的网页爬虫

import requests url"https://news.ifeng.com/c/8OZc7eV01sM" rrequests.get(url) print(r.status_code) print(r.iter_lines()) # 获取响应的内容 content r.text# 打印网页内容 print(content) # responser.json() # print(response) 爬虫知识讲解&#xff1a; …...

二叉树-数据结构

二叉树-数据结构 二叉树是属性结构的一个重要类型。 如下图二叉树形状 二叉树特征如下&#xff1a; 1.二叉树由 n(n > 0) 个节点组成 2.如果 n 为 0&#xff0c;则为空树 3.如果 n 1&#xff0c;则只有一个节点称为根节点(root) 4.每个节点最多有两个节点&#xff0c;节…...

ansible使用shell模块的环境变量问题

在本机写了一个shell脚本&#xff0c;关于操作mysql的&#xff0c;在本机执行脚本可以正常操作数据库&#xff0c;脚本运行正常。 但是使用ansible ansible -i ./hosts test_teledb -m copy -a "src/etc/ansible/scripts/check.sh dest/tmp"ansible -i ./hosts test…...

ChatGPT论文写作指南:写出引人注目的论文

ChatGPT无限次数:点击直达 ChatGPT论文写作指南&#xff1a;写出引人注目的论文 作为一名有着10年经验的专业CSDN网站原创文章优质创作者&#xff0c;在当今的信息爆炸时代&#xff0c;论文写作的重要性愈发显现。如何能够写出引人注目的论文&#xff0c;吸引读者的眼球并获得…...

ARM64架构栈帧回溯

文章目录 前言一、栈帧简介二、demo演示 前言 请参考&#xff1a;ARM64架构栈帧以及帧指针FP 一、栈帧简介 假设下列函数调用&#xff1a; funb() {func() }funa() {funb() }main() {funa() }main函数&#xff0c;funa函数&#xff0c;funb函数都不是叶子函数&#xff0c;其…...

LangChain:大型语言模型(LLMs)-- 基础知识

1、LangChain的调用大型语言模型模块的介绍 LangChain是一个强大的框架&#xff0c;旨在通过调用大型语言模型&#xff08;LLM&#xff09;来开发各种语言驱动的应用程序。在LangChain中&#xff0c;LLM不仅仅是一个简单的模型调用&#xff0c;而是一个复杂链条中的关键部分。…...

总分410+专业130+国防科技大学831信号与系统考研经验国防科大电子信息与通信工程,真题,大纲,参考书。

好几个学弟催着&#xff0c;总结一下我自己的复习经历&#xff0c;希望大家复习少走弯路&#xff0c;投入的复习正比换回分数。我专业课831信号与系统130&#xff08;感觉比估分要低&#xff0c;后面找Jenny老师讨论了自己拿不准的地方也没有错误&#xff0c;心里最近也这经常回…...

chatgpt Team 4.0共享合租账号的新方式

为了更好地满足工作需求&#xff0c;我订阅了GPT PLUS会员&#xff0c;但我发现&#xff0c;4.0每三小时问答40次经常吃灰&#xff0c;而且每月近200元的费用让我感到有点肉痛。 于是&#xff0c;我开始寻找有没有什么替代品。在逛某论坛的时候&#xff0c;发现了一个共享Team…...

类和对象二

一、运算符重载 为了使自定义类型可以使用加减等运算符&#xff0c;CPP提供了一个功能叫运算符重载。 关键字&#xff1a;operator操作符 运算符重载最好定义在类对象里&#xff0c;这也可以避免访问不到私有成员的问题。 代码演示&#xff1a; 在类里定义之后&#xff0c;…...

GD32 HID键盘矩阵键盘发送数据时,一直发送数据问题处理

这个问题找了两三天,开始并不认为是示例程序的问题,只是感觉是自己代码问题。 这个解决流程大概是: 先调好矩阵键盘=> 调用发送函数。 就是因为调用时,一直发送数据,我也在按键抬起做了操作,始终不行。 最后,发现时示例代码中有个 空闲中断 引起的。 udev->reg…...

小程序地理位置权限申请+uniapp调用uni.getLocation

文章目录 一、小程序地理位置权限申请二、uniapp调用uni.getLocation 一、小程序地理位置权限申请 需要确保小程序类目已经填写 点击左侧导航栏找到最后的“设置”——“基本设置”——“前往填写” 在开发管理——接口设置——地理位置中可以看到&#xff1a; 即可点击想要申…...

后台权限控制及动态路由

需求 后台系统需要能实现不同的用户权限可以看到不同的功能。 用户只能使用他的权限所允许使用的功能。 功能设计 之前在我的SpringSecurity的课程中就介绍过RBAC权限模型。没有学习过的可以去看下 RBAC权限模型 。这里我们就是在RBAC权限模型的基础上去实现这个功能。 表分…...

云计算:Linux 部署 OVS 集群(控制端)实现OpenFlow

目录 一、实验 1.环境 2.Linux 部署 OVS 集群&#xff08;控制端&#xff09; 3.控制端对接服务端OVS网元 4.服务端OVS添加流表 5.服务端删除OVS 二、问题 1. ODL如何查找已安装插件 2.查看流表显示不全 3.如何删除OVS流表 一、实验 1.环境 (1) 主机 表1 宿主机 主…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

音视频——I2S 协议详解

I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议&#xff0c;专门用于在数字音频设备之间传输数字音频数据。它由飞利浦&#xff08;Philips&#xff09;公司开发&#xff0c;以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝

目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为&#xff1a;一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...

Webpack性能优化:构建速度与体积优化策略

一、构建速度优化 1、​​升级Webpack和Node.js​​ ​​优化效果​​&#xff1a;Webpack 4比Webpack 3构建时间降低60%-98%。​​原因​​&#xff1a; V8引擎优化&#xff08;for of替代forEach、Map/Set替代Object&#xff09;。默认使用更快的md4哈希算法。AST直接从Loa…...

代码规范和架构【立芯理论一】(2025.06.08)

1、代码规范的目标 代码简洁精炼、美观&#xff0c;可持续性好高效率高复用&#xff0c;可移植性好高内聚&#xff0c;低耦合没有冗余规范性&#xff0c;代码有规可循&#xff0c;可以看出自己当时的思考过程特殊排版&#xff0c;特殊语法&#xff0c;特殊指令&#xff0c;必须…...

k8s从入门到放弃之HPA控制器

k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率&#xff08;或其他自定义指标&#xff09;来调整这些对象的规模&#xff0c;从而帮助应用程序在负…...

Python网页自动化Selenium中文文档

1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API&#xff0c;让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API&#xff0c;你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...

热烈祝贺埃文科技正式加入可信数据空间发展联盟

2025年4月29日&#xff0c;在福州举办的第八届数字中国建设峰会“可信数据空间分论坛”上&#xff0c;可信数据空间发展联盟正式宣告成立。国家数据局党组书记、局长刘烈宏出席并致辞&#xff0c;强调该联盟是推进全国一体化数据市场建设的关键抓手。 郑州埃文科技有限公司&am…...