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

2024/06/11--代码随想录算法1/17|理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

理论基础

在这里插入图片描述

动态规划:当前状态由前面的状态推导而来
贪心:局部选最优

动态规划5步曲

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

509. 斐波那契数

力扣链接
在这里插入图片描述

动态规划5步曲

  1. 确定dp数组(dp table)以及下标的含义:dp[i]是F(i)
  2. 确定递推公式,dp[i] = dp[i-1]+dp[i-2] i>1
  3. dp数组如何初始化 dp[0]=0 dp[1]=1
  4. 确定遍历顺序【从前往后】
  5. 举例推导dp数组

【动态规划】

时间复杂度:O(n) ,空间复杂度:O(n)
class Solution:def fib(self, n: int) -> int:if n == 0: return 0  #否则dp[1]就有问题dp = [0] * (n+1)dp[0] = 0dp[1] = 1for n in range(2,n+1):dp[n] = dp[n-1] + dp[n-2]return dp[n]	
#只用维护两个数值 ,时间复杂度:O(n) ,空间复杂度:O(1)
class Solution:def fib(self, n: int) -> int:if n <= 1 : return nprev1, prev2 = 0, 1for _ in range(2, n+1):cur = prev1 + prev2prev1, prev2 = prev2, curreturn prev2

【递归法】时间复杂度:O(2^n) ,空间复杂度:O(n)

class Solution:def fib(self, n: int) -> int:if n<2: return nreturn self.fib(n-1)+self.fib(n-2)

70. 爬楼梯

力扣链接
在这里插入图片描述

动态规划5步曲

  1. 确定dp数组(dp table)以及下标的含义: dp[i]:爬到第i个楼梯,有dp[i]种办法
  2. 确定递推公式,dp[i] = dp[i-1]+dp[i-2] i>1
  3. dp数组如何初始化 dp[1]=1 dp[2]=2
  4. 确定遍历顺序【从前往后】
  5. 举例推导dp数组
# 空间复杂度为O(n)版本
class Solution:def climbStairs(self, n: int) -> int:if n <= 1:return ndp = [0] * (n + 1)dp[1] = 1dp[2] = 2for i in range(3, n + 1):dp[i] = dp[i - 1] + dp[i - 2]return dp[n]
# 空间复杂度为O(1)版本
class Solution:def climbStairs(self, n: int) -> int:if n<3: return nprev1, prev2 = 1, 2for i in range(3,n+1):cur = prev1 + prev2prev1, prev2 = prev2, curreturn prev2

746. 使用最小花费爬楼梯

力扣链接
在这里插入图片描述

动态规划5步曲

  1. 确定dp数组(dp table)以及下标的含义:
    cost[i] :第 i 个阶梯对应着一个非负数的体力花费值;dp[i]:到达第i台阶所花费的最少体力
  2. 确定递推公式,dp[i] = min(dp[i-1]+cost[i-1], dp[i-2]+cost[i-2]) i>2
  3. dp数组如何初始化 dp[1]=cost[0] dp[2]=2
  4. 确定遍历顺序【从前往后】
  5. 举例推导dp数组

相关文章:

  • Spark的开发环境配置
  • LeakSearch:针对网络公开凭证的安全扫描与检测工具
  • 【设计模式】创建型设计模式之 建造者模式
  • 【机器学习】让计算机变得更加智能
  • IDEA创建Maven项目
  • 【设计模式】创建型设计模式之 工厂模式
  • 我要成为算法高手-双指针篇
  • 34.打印K型
  • Vue10-事件修饰符
  • React@16.x(25)useReducer
  • orbslam2代码解读(4):loopclosing回环检测线程
  • 从票务到游戏:Celestia 首届黑客松亮点项目盘点
  • 笨蛋学算法之LeetCodeHot100_2_字母异位词分组(Java)
  • 【机器学习理论基础】定量变量和定性变量
  • 30岁迷茫?AI赛道,人生新起点
  • EventListener原理
  • in typeof instanceof ===这些运算符有什么作用
  • Java 网络编程(2):UDP 的使用
  • js数组之filter
  • Protobuf3语言指南
  • Python学习笔记 字符串拼接
  • text-decoration与color属性
  • ViewService——一种保证客户端与服务端同步的方法
  • vue--为什么data属性必须是一个函数
  • 聊聊flink的TableFactory
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 学习笔记TF060:图像语音结合,看图说话
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • 用element的upload组件实现多图片上传和压缩
  • 用quicker-worker.js轻松跑一个大数据遍历
  • #etcd#安装时出错
  • #include
  • #QT(智能家居界面-界面切换)
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (Oracle)SQL优化基础(三):看懂执行计划顺序
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (原創) 未来三学期想要修的课 (日記)
  • (转)linux 命令大全
  • (轉貼) UML中文FAQ (OO) (UML)
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .java 9 找不到符号_java找不到符号
  • .net CHARTING图表控件下载地址
  • .Net 高效开发之不可错过的实用工具
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据
  • .NET企业级应用架构设计系列之应用服务器
  • /etc/motd and /etc/issue
  • ??如何把JavaScript脚本中的参数传到java代码段中
  • [202209]mysql8.0 双主集群搭建 亲测可用
  • [AutoSar]BSW_Memory_Stack_004 创建一个简单NV block并调试
  • [CC2642r1] ble5 stacks 蓝牙协议栈 介绍和理解