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

509. 斐波那契数

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

文章讲解:代码随想录

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

思路:输入:2  输出:1  解释:F(2) = F(1) + F(0) = 1 + 0 = 1

动规五部曲:

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

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

2.确定递推公式

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

3.dp数组初始化

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

4.确定遍历顺序

dp[i]是依赖 dp[i - 1] 和 dp[i - 2],遍历的顺序一定是从前到后遍历的

5.举例推导dp数组

按照递推公式dp[i] = dp[i - 1] + dp[i - 2],当N=10时:0 1 1 2 3 5 8 13 21 34 55

如果代码结果不对,就把dp数组打印出来看看和推导的数列是不是一致的

时间复杂度:O(n)   空间复杂度:O(n)

70. 爬楼梯

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

文章讲解:​​​​​​​代码随想录

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

思路:输入:n = 3     输出:3

解释:有三种方法可以爬到楼顶。1 阶 + 1 阶 + 1 阶,1 阶 + 2 阶,2 阶 + 1 阶

定义一个一维数组来记录不同楼层的状态

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

dp[i]: 爬到第i层楼梯,有dp[i]种方法

2.确定递推公式

dp[i] 可以有两个方向推出来:一个是dp[i-1]再往上走一个台阶,一个是dp[i-2]再往上走2个台阶。dp[i - 1],上i-1层楼梯,有dp[i - 1]种方法,还有就是dp[i - 2],上i-2层楼梯,有dp[i - 2]种方法,dp[i]是两种方法之和,所以dp[i] = dp[i - 1] + dp[i - 2]

3.dp数组初始化

dp[1] = 1,dp[2] = 2,然后从i = 3开始递推

4.确定遍历顺序

从递推公式dp[i] = dp[i - 1] + dp[i - 2];中可以看出,遍历顺序一定是从前向后遍历的

5.举例推导dp数组

举例当n为5的时候,dp table(dp数组)应该是:1 2 3 5 8,如果代码出问题了,就把dp table 打印出来

时间复杂度:O(n)     空间复杂度:O(n)

746. 使用最小花费爬楼梯

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

文章讲解:​​​​​​​代码随想录

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

思路:

输入:cost = [10, 15, 20]    输出:15   解释:最低花费是从 cost[1] 开始,然后走两步即可到阶梯顶,一共花费 15

使用动态规划,就要有一个数组来记录状态,本题只需要一个一维数组dp[i]就可以了

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

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

2.确定递推公式

可以有两个途径得到dp[i],一个是dp[i-1] 一个是dp[i-2]。cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用

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

选从dp[i - 1]跳还是从dp[i - 2]跳?一定是选最小的,所以dp[i] = min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2]);

3.dp数组初始化

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

4.确定遍历顺序

从前到后遍历cost数组

5.举例推导dp数组

示例2:cost = [1, 100, 1, 1, 1, 100, 1, 1, 100, 1] ,来模拟一下dp数组的状态变化,如下:0 0 1 2 2 3 3 4 4 5 6

时间复杂度:O(n)      空间复杂度:O(n)

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

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

相关文章

拼多多 anti-token unidbg 分析

声明: 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 逆向分析 版本7.3-7.4 都试过加密没什…

【工具】BioPred一个用于精准医疗中生物标志物分析的 R 软件包

介绍 R 语言包 BioPred 提供了一系列用于精准医疗中的亚组分析和生物标志物分析的工具。它借助极端梯度提升(XGBoost)算法,并结合倾向得分加权和 A 学习方法,帮助优化个体化治疗规则,从而简化亚组识别过程。BioPred 还…

横扫SQL面试——时间序列分组与合并(会话划分)问题

横扫SQL面试题 📌 时间序列分组与合并问题 📚 横扫SQL面试——时间序列分组与合并解析 🌟 核心问题类型 时间序列分组(Sessionization) 处理具有时间维度的连续数据流,根据特定规则(如时间间隔…

PCB钻孔之多边形孔分析

问题分析 在钻孔过程中,钻头的运动可以分为两部分: 公转:钻头的轴线绕理想轴线(钻孔中心线)做圆周运动。自转:钻头绕自身轴线做旋转运动。 由于公转和自转的叠加,钻尖的运动轨迹会形成复杂的…

Android源码之App启动

目录 App启动概述 App启动过程 App启动过程图 源码概述 跨进程启动 进程内启动 下面以应用桌面Launcher启动App的MainActivity来举例: App启动概述 首先,MainActivity是由Launcher组件来启动的,而Launcher又是通过Activity管理服务Act…

指纹浏览器技术解析:如何实现多账号安全运营与隐私保护

浏览器指纹的挑战与需求 在数字化运营场景中,浏览器指纹技术被广泛用于追踪用户行为。通过采集设备硬件参数(如屏幕分辨率、操作系统)、软件配置(如字体、插件)及网络特征(如IP地址、时区)&…

生活电子常识——cmd不能使用anaconda的python环境,导致输入python打开应用商店

前言 电脑已经安装了anaconda,从自带的Anaconda Prompt (Anaconda3)中是可以识别python环境的,然而切换到cmd时,突然发现cmd中无法识别anaconda的python环境,竟然打开了应用商店让我安装Python,这当然是不对的。 解决 这是因为…

搭建前端环境和后端环境

搭建前端环境 ①、安装vscode,并安装相应的插件工具 ②、安装node.js,可以选择当前版本,或者其他版本 ③、创建工作区 创建一个空文件夹,然后通过vscode工具打开,保存为后缀名为.code-workspace ④、从gitee…

Java基础知识总结(1.8)——Java 注解(持续更新)

更新时间:2025-03-31 Web后端专栏:CSDN专栏——理论-Web后端技术博客总目录:计算机技术系列博客——目录页 8.1 注解的概念 8.1.1 定义与作用 Java注解(Annotation)是Java语言自JDK1.5版本引入的核心特性&#xff0…

线程概念与控制(下)

线程概念与控制(中)https://blog.csdn.net/Small_entreprene/article/details/146539064?sharetypeblogdetail&sharerId146539064&sharereferPC&sharesourceSmall_entreprene&sharefrommp_from_link对于之前学习的内容,我们…

SQL注入之盲注技术详解

SQL注入之盲注技术详解 一、盲注基本概念盲注特点: 二、盲注主要类型1. 布尔盲注判断依据: 2. 时间盲注判断依据: 三、布尔盲注详细技术1. 识别布尔盲注2. 数据提取技术(1) 判断数据库类型(2) 获取数据库名长度(3) 逐字符获取数据库名(4) 获取…

OpenCV 图形API(3)高层次设计概览

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 描述 G-API 是一个异构框架,提供了统一的 API 来使用多个支持的后端编程图像处理流水线。 关键的设计理念是在指定使用哪些内核和设备时保持流…

阿里云Tair KVCache:打造以缓存为中心的大模型Token超级工厂

一、Tair KVCache 简介 Tair KVCache 是阿里云瑶池旗下云数据库 Tair 面向大语言模型推理场景推出的 KVCache 缓存加速服务。 随着互联网技术的演进与流量规模的激增,缓存技术逐渐成为系统架构的核心组件。该阶段催生了 Redis 等开源缓存数据库,阿里巴巴…

Open GL ES ->GLSurfaceView正交投影与透视投影方法中近远平面取值参考

坐标系 OpenGL ES使用右手坐标系&#xff0c;相机默认朝向负z方向 相机位置|vz轴<----- 0 -----> -near -----> -far -----不可见 可见区域 不可见裁剪规则 只有z值在[-near, -far]范围内的物体可见&#xff0c; 当z > -near&#xff08;在近平面前&#…

iOS自定义collection view的page size(width/height)分页效果

前言 想必大家工作中或多或少会遇到下图样式的UI需求吧 像这种cell长度不固定&#xff0c;并且还能实现的分页效果UI还是很常见的 实现 我们这里实现主要采用collection view&#xff0c;实现的方式是自定义一个UICollectionViewFlowLayout的子类&#xff0c;在这个类里对…

Java高频面试之并发编程-01

hello啊&#xff0c;各位观众姥爷们&#xff01;&#xff01;&#xff01;本baby今天来报道了&#xff01;哈哈哈哈哈嗝&#x1f436; 面试官&#xff1a;并行跟并发有什么区别&#xff1f; 并发 vs 并行&#xff1a;核心区别与场景 1. 定义对比 维度并发&#xff08;Concu…

从零开始学Rust:所有权(Ownership)机制精要

文章目录 第四章&#xff1a;Ownership 所有权核心概念关键机制引用与借用&#xff08;Reference & Borrowing&#xff09;悬垂引用问题错误示例分析解决方案引用安全规则 切片&#xff08;Slice&#xff09;内存安全保证 第四章&#xff1a;Ownership 所有权 Ownership i…

一旦懂得,有趣得紧1:词根tempt-(尝试)的两种解法

词根tempt-尝试 tempt vt.引诱&#xff1b;诱惑&#xff1b;怂恿&#xff1b;利诱&#xff1b;劝诱&#xff1b;鼓动 temptation n.引诱&#xff1b;诱惑 // tempt v.引诱 -ation 名词后缀 attempt v.&n.尝试&#xff0c;试图 // at- 加强 tempt 尝试contempt n.蔑视&am…

召唤数学精灵

1.召唤数学精灵 - 蓝桥云课 问题描述 数学家们发现了两种用于召唤强大的数学精灵的仪式&#xff0c;这两种仪式分别被称为累加法仪式 A(n) 和累乘法仪式 B(n)。 累加法仪式 A(n) 是将从1到 n 的所有数字进行累加求和&#xff0c;即&#xff1a; A(n)12⋯n 累乘法仪式 B(n) …

C语言实现查表8位SAE J1850 CRC

背景&#xff1a; 在做霍尔采集电流的时候&#xff0c;CSSV1500N 系列电流传感器通过can数据输出的报文需要做crc校验&#xff0c;嵌入式常用查表的方式&#xff0c;所以就问了下deepseek怎么算这个CRC. 以下是使用 查表法&#xff08;Lookup Table&#xff09; 在C语言中高效…