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

数据结构与算法:动态规划dp:理论基础和相关力扣题(509.斐波那契数列、70.爬楼梯)

1.0.理论基础

动态规划主要解决的问题种类有:

  • 背包问题
  • 打家劫舍
  • 股票问题
  • 子序列问题

解决步骤:

  • dp数组及其下标的意义
  • 递推公式
  • dp数组初始化
  • 遍历顺序
  • 打印dp数组

2.0.相关力扣题

509.斐波那契数列

class Solution:def fib(self, n: int) -> int:if n==0:return 0if n==1:return 1dp = [0]*35dp[1] = 1for i in range(2,31):dp[i] = dp[i-1]+dp[i-2]return dp[n]

效率:0ms,击败100.00%

状态压缩

再优化一下,因为每个斐波那契数只和它相邻的两个数有关,所以我们其实不需要存储三十多个长度,只需要保留2个数的信息即可。也就是状态压缩。

class Solution:def fib(self, n: int) -> int:if n==0:return 0if n==1:return 1dp = [0]*2dp[1]=1sum = 0for i in range(2,n):sum = dp[0]+dp[1]dp[0] = dp[1]dp[1] = sumreturn dp[0]+dp[1]

70.爬楼梯

509.斐波那契数列很像

class Solution:def climbStairs(self, n: int) -> int:if n==1:return 1if n==2:return 2dp = [0] * 50dp[1] = 1dp[2] = 2for i in range(3,n+1):dp[i] = dp[i-1]+dp[i-2]print(dp)return dp[n]

效率:0ms,击败100.00%

状态压缩

class Solution:def climbStairs(self, n: int) -> int:if n==1:return 1if n==2:return 2dp = [0] * 4dp[1] = 1dp[2] = 2sum = 0for i in range(3,n):sum = dp[1]+dp[2]dp[1] = dp[2]dp[2] = sumreturn dp[1]+dp[2]

756.使用最小代价爬楼梯

需要注意的是,这里的dp[i]代表着爬到台阶为i时所需的最小代价。

class Solution:def minCostClimbingStairs(self, cost: List[int]) -> int:n = len(cost)if n == 2:return min(cost[0],cost[1])dp = [0]*1005dp[0] = 0dp[1] = 0for i in range(2,n+1):dp[i] = min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2])return dp[n]

效率:2ms,击败83.69%

http://www.lryc.cn/news/522211.html

相关文章:

  • 某政务行业基于 SeaTunnel 探索数据集成平台的架构实践
  • word-break控制的几种容器换行行为详解
  • 【0x0084】HCI_Set_Min_Encryption_Key_Size命令详解
  • 关于2025年智能化招聘管理系统平台发展趋势
  • Docker部署Spring Boot + Vue项目
  • 开发规范
  • 九 RK3568 android11 MPU6500
  • openplant实时数据库(二次开发)
  • C语言:-三子棋游戏代码:分支-循环-数组-函数集合
  • “AI智慧化服务系统:未来生活的智能管家
  • python管理工具:conda部署+使用
  • minio https配置
  • SpringMVC——原理简介
  • Ubuntu18.04 解决 libc.so.6: version `GLIBC_2.28‘ not found
  • Notepad++移除所有空格
  • Android BottomNavigationView不加icon使text垂直居中,完美解决。
  • 如何使用 `forEach` 遍历数组?
  • Go语言之路————条件控制:if、for、switch
  • OpenAI推出首个AI Agent!日常事项自动化处理!
  • Go语言的编程范式
  • 如何在 Rocky Linux 上安装极狐GitLab?
  • 数据库(MySQL)练习
  • Mac上安装Label Studio
  • 【airtest】自动化入门教程Poco元素定位
  • 【爬虫】某某查cookie逆向
  • 【进程与线程】进程的状态
  • 阻塞赋值和非阻塞赋值
  • Maven在Win10上的安装教程
  • 攻防世界_SQL注入
  • Ruby语言的数据结构