代码随想录算法训练营第三十八天| 509. 斐波那契数,70. 爬楼梯,746. 使用最小花费爬楼梯
题目与题解
参考资料:动态规划基础
动态规划五步曲
- 确定dp数组(dp table)以及下标的含义
- 确定递推公式
- dp数组如何初始化
- 确定遍历顺序
- 举例推导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;}
}
看完代码随想录之后的想法
按照随想录的五步法做练习:
- 确定dp数组(dp table)以及下标的含义:dp[i]表示数i的斐波那契数
- 确定递推公式:题目已经给了,dp[i]=dp[i-1]+dp[i-2]
- dp数组如何初始化:同样题目已经给了,dp[0] = 0, dp[1] = 1
- 确定遍历顺序:当前数的斐波那契数由其前两个数相加直接得到,所以按顺序遍历即可
- 举例推导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. 使用最小花费爬楼梯
题目与题解 参考资料:动态规划基础 动态规划五步曲 确定dp数组(dp table)以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组 509. 斐波那契数 题目链接:509. 斐波那契数 代码随想录题解&am…...
视频中会动的进度条
视频中会动的进度条 1.成果展示:2.步骤: 1.成果展示: 2.步骤:...
C++高级特性:柯里化过程与std::bind(六)
1、柯里化过程 1.1、operator()的引入 现在需要完成这样一个需求:有一个函数每次调用返回的结果不一样。例如:两次调用的返回值都不一样那么就可以达到这种目的 1.1.1、简单点的写法 可以给一个全局的变量(静态变量)ÿ…...
vmware虚拟机补救
更新了虚拟机里面工具和资料,进行了磁盘整理和压缩,虚拟机运行进不去系统了。 网站找的修复方法均不可行。补救措施:利用DiskGenius.exe(要用高版本不然复制的时候就知道了) DG1342.rar - 蓝奏云 加载虚拟硬盘 2008x…...
数据结构(算法)
总结,建议看EXCEL的《算法》页签,不然感觉有点乱 备注原理/步骤时间复杂度空间复杂度串的应用模式匹配简单/暴力O(mn) KMP O(mn) 树的应用树哈夫曼树1、带权路径长度WPL 2、外部排序-最佳归并树1、哈夫曼树的度,只有0和m(m叉…...
SpringCloud集成SkyWalking链路追踪并收集日志2
博主介绍:✌全网粉丝5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…...
纯小白蓝桥杯备赛笔记--DAY4(数学数据结构图论)
文章目录 数学质因数分解辗转相除法求最大公约数最小公倍数:快速幂乘法逆元费马小定理 逆元乘法逆元素数判定与埃式筛法朴素素数判定法埃式筛法 图论并查集T3:真题--合根植物DijkstraFloyd 基础算法递归,循环,前缀和,差分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) 爬虫知识讲解: …...
二叉树-数据结构
二叉树-数据结构 二叉树是属性结构的一个重要类型。 如下图二叉树形状 二叉树特征如下: 1.二叉树由 n(n > 0) 个节点组成 2.如果 n 为 0,则为空树 3.如果 n 1,则只有一个节点称为根节点(root) 4.每个节点最多有两个节点,节…...
ansible使用shell模块的环境变量问题
在本机写了一个shell脚本,关于操作mysql的,在本机执行脚本可以正常操作数据库,脚本运行正常。 但是使用ansible ansible -i ./hosts test_teledb -m copy -a "src/etc/ansible/scripts/check.sh dest/tmp"ansible -i ./hosts test…...
ChatGPT论文写作指南:写出引人注目的论文
ChatGPT无限次数:点击直达 ChatGPT论文写作指南:写出引人注目的论文 作为一名有着10年经验的专业CSDN网站原创文章优质创作者,在当今的信息爆炸时代,论文写作的重要性愈发显现。如何能够写出引人注目的论文,吸引读者的眼球并获得…...
ARM64架构栈帧回溯
文章目录 前言一、栈帧简介二、demo演示 前言 请参考:ARM64架构栈帧以及帧指针FP 一、栈帧简介 假设下列函数调用: funb() {func() }funa() {funb() }main() {funa() }main函数,funa函数,funb函数都不是叶子函数,其…...
LangChain:大型语言模型(LLMs)-- 基础知识
1、LangChain的调用大型语言模型模块的介绍 LangChain是一个强大的框架,旨在通过调用大型语言模型(LLM)来开发各种语言驱动的应用程序。在LangChain中,LLM不仅仅是一个简单的模型调用,而是一个复杂链条中的关键部分。…...
总分410+专业130+国防科技大学831信号与系统考研经验国防科大电子信息与通信工程,真题,大纲,参考书。
好几个学弟催着,总结一下我自己的复习经历,希望大家复习少走弯路,投入的复习正比换回分数。我专业课831信号与系统130(感觉比估分要低,后面找Jenny老师讨论了自己拿不准的地方也没有错误,心里最近也这经常回…...
chatgpt Team 4.0共享合租账号的新方式
为了更好地满足工作需求,我订阅了GPT PLUS会员,但我发现,4.0每三小时问答40次经常吃灰,而且每月近200元的费用让我感到有点肉痛。 于是,我开始寻找有没有什么替代品。在逛某论坛的时候,发现了一个共享Team…...
类和对象二
一、运算符重载 为了使自定义类型可以使用加减等运算符,CPP提供了一个功能叫运算符重载。 关键字:operator操作符 运算符重载最好定义在类对象里,这也可以避免访问不到私有成员的问题。 代码演示: 在类里定义之后,…...
GD32 HID键盘矩阵键盘发送数据时,一直发送数据问题处理
这个问题找了两三天,开始并不认为是示例程序的问题,只是感觉是自己代码问题。 这个解决流程大概是: 先调好矩阵键盘=> 调用发送函数。 就是因为调用时,一直发送数据,我也在按键抬起做了操作,始终不行。 最后,发现时示例代码中有个 空闲中断 引起的。 udev->reg…...
小程序地理位置权限申请+uniapp调用uni.getLocation
文章目录 一、小程序地理位置权限申请二、uniapp调用uni.getLocation 一、小程序地理位置权限申请 需要确保小程序类目已经填写 点击左侧导航栏找到最后的“设置”——“基本设置”——“前往填写” 在开发管理——接口设置——地理位置中可以看到: 即可点击想要申…...
后台权限控制及动态路由
需求 后台系统需要能实现不同的用户权限可以看到不同的功能。 用户只能使用他的权限所允许使用的功能。 功能设计 之前在我的SpringSecurity的课程中就介绍过RBAC权限模型。没有学习过的可以去看下 RBAC权限模型 。这里我们就是在RBAC权限模型的基础上去实现这个功能。 表分…...
云计算:Linux 部署 OVS 集群(控制端)实现OpenFlow
目录 一、实验 1.环境 2.Linux 部署 OVS 集群(控制端) 3.控制端对接服务端OVS网元 4.服务端OVS添加流表 5.服务端删除OVS 二、问题 1. ODL如何查找已安装插件 2.查看流表显示不全 3.如何删除OVS流表 一、实验 1.环境 (1) 主机 表1 宿主机 主…...
终极指南:快速掌握碧蓝航线Live2D资源提取技术
终极指南:快速掌握碧蓝航线Live2D资源提取技术 【免费下载链接】AzurLaneLive2DExtract OBSOLETE - see readme / 碧蓝航线Live2D提取 项目地址: https://gitcode.com/gh_mirrors/az/AzurLaneLive2DExtract 在数字内容创作和游戏开发领域,Live2D动…...
Qt QColumnView实战:手把手教你打造一个macOS Finder风格的文件浏览器
Qt QColumnView实战:从零构建macOS风格文件浏览器 在桌面应用开发中,文件浏览器的实现一直是开发者面临的经典挑战。传统方案往往采用QTreeView或QListView,但它们难以还原macOS Finder那种优雅的列式导航体验。这正是QColumnView的用武之地—…...
Speechless微博备份工具:3分钟学会完整导出PDF的终极指南
Speechless微博备份工具:3分钟学会完整导出PDF的终极指南 【免费下载链接】Speechless 把新浪微博的内容,导出成 PDF 文件进行备份的 Chrome Extension。 项目地址: https://gitcode.com/gh_mirrors/sp/Speechless 你是否曾担心珍贵的微博回忆突然…...
Arm嵌入式编译器C/C++库架构与优化实践
1. Arm嵌入式编译器C/C库架构解析 1.1 运行时库体系结构 Arm Compiler for Embedded提供完整的C/C标准库实现,其架构设计遵循分层原则: 基础层 :ISO C99标准库(libc)提供字符串处理、内存管理、数学运算等基础功能 …...
FMCP协议:构建创作者统一文件管理中枢,打破应用孤岛
1. 项目概述:一个为创作者而生的文件管理中枢如果你是一位内容创作者,无论是视频剪辑师、摄影师、平面设计师,还是播客制作人,你的工作流里一定少不了与海量文件打交道。原始素材、工程文件、渲染输出、版本迭代……这些文件散落在…...
容器技术从入门到精通:Docker核心概念、Dockerfile与生产实践全解析
1. 项目概述:从零到一构建容器化认知体系最近在技术社区里,经常看到有朋友在讨论stephrobert/containers-training这个仓库。乍一看,这像是一个个人或团队维护的关于容器技术的培训材料。对于刚接触 Docker 和容器生态的开发者、运维工程师&a…...
Axolotl与LLaMA-Factory对比:架构与扩展性分析-方案选型对比
1. 问题背景与选型目标 在大型语言模型(LLM)落地的浪潮中,“微调”已从少数研究团队的实验行为,变为大量中小企业甚至个人开发者的刚需。业务团队不再仅仅使用 API 调用闭源模型,而是希望基于开源基座模型(…...
基于MCP的AI智能体:自动化与优化亚马逊DSP广告实战指南
1. 项目概述:用AI智能体管理亚马逊DSP广告如果你正在寻找一种更高效、更智能的方式来管理亚马逊需求方平台(Amazon DSP)的广告活动,那么这个项目可能就是为你准备的。作为一个在程序化广告领域摸爬滚打了十多年的从业者࿰…...
为Dify扩展AI图表与文档生成能力:微服务架构实战指南
1. 项目概述:为Dify打造专属的AI图表与文档生成工具箱如果你正在使用Dify构建自己的AI应用,并且希望让AI不仅能生成文字,还能直接输出流程图、思维导图、PPT甚至试卷,那么这个项目就是为你准备的。brightwang/dify-tool-service是…...
芯片测试中的扫描压缩技术解析与应用
1. 扫描压缩技术概述在当今纳米级芯片设计中,扫描压缩技术已成为降低测试成本、保证测试质量的必备手段。随着芯片复杂度呈指数级增长,传统扫描测试方法面临两大核心挑战:测试数据量(Test Data Volume)爆炸式增长导致测…...
