代码随想录算法训练营Day38 | 动态规划理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯 | Python | 个人记录向

本文主要是介绍代码随想录算法训练营Day38 | 动态规划理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯 | Python | 个人记录向,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

注:Day37休息。

本文目录

  • 动态规划理论基础
  • 509. 斐波那契数
    • 做题
    • 看文章
  • 70. 爬楼梯
    • 做题
    • 看文章
      • 空间复杂度为O(n)版本
      • 空间复杂度为O(3)版本
  • 746. 使用最小花费爬楼梯
    • 做题
    • 看文章
  • 以往忽略的知识点小结
  • 个人体会

动态规划理论基础

代码随想录:动态规划理论基础

动规五部曲:

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

509. 斐波那契数

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

做题

class Solution:def fib(self, n: int) -> int:if n == 0 or n == 1:return nf = [0] * (n+1)f[0] = 0f[1] = 1i = 2while i <= n:f[i] = f[i-1] + f[i-2]i += 1return f[n]  

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

看文章

可以只维护两个数值。
时间复杂度: O(n)
空间复杂度: O(1)

70. 爬楼梯

代码随想录:70. 爬楼梯
Leetcode:70. 爬楼梯

做题

往上一格和两格加上当前的方法数,初始值为1。但感觉有点懵懵的。

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

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

看文章

其实类似斐波那契数。

空间复杂度为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(3)版本

# 空间复杂度为O(3)版本
class Solution:def climbStairs(self, n: int) -> int:if n <= 1:return ndp = [0] * 3dp[1] = 1dp[2] = 2for i in range(3, n + 1):total = dp[1] + dp[2]dp[1] = dp[2]dp[2] = totalreturn dp[2]

把dp[1]和dp[2]改为常变量,就变成O(1)了。

746. 使用最小花费爬楼梯

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

做题

直接在cost数组上做计算即可。

class Solution:def minCostClimbingStairs(self, cost: List[int]) -> int:size = len(cost)for i in range(2, len(cost)):cost[i] = min(cost[i-1], cost[i-2]) + cost[i]return min(cost[size-1], cost[size-2])

时间复杂度:O(n)
空间复杂度:O(1),使用原始数组不算空间复杂度

看文章

思路差不多。

以往忽略的知识点小结

  • 动规如果只需要保存前几个数,可以用几个常变量保存,降低空间复杂度
  • 可以举例推导dp数组,然后打印日志来debug

个人体会

完成时间:1h20min。
心得:动规刚开始,需要理清思路,今天都AC了。

这篇关于代码随想录算法训练营Day38 | 动态规划理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯 | Python | 个人记录向的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/987881

相关文章

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

一文深入详解Python的secrets模块

《一文深入详解Python的secrets模块》在构建涉及用户身份认证、权限管理、加密通信等系统时,开发者最不能忽视的一个问题就是“安全性”,Python在3.6版本中引入了专门面向安全用途的secr... 目录引言一、背景与动机:为什么需要 secrets 模块?二、secrets 模块的核心功能1. 基

python常见环境管理工具超全解析

《python常见环境管理工具超全解析》在Python开发中,管理多个项目及其依赖项通常是一个挑战,下面:本文主要介绍python常见环境管理工具的相关资料,文中通过代码介绍的非常详细,需要的朋友... 目录1. conda2. pip3. uvuv 工具自动创建和管理环境的特点4. setup.py5.

Python常用命令提示符使用方法详解

《Python常用命令提示符使用方法详解》在学习python的过程中,我们需要用到命令提示符(CMD)进行环境的配置,:本文主要介绍Python常用命令提示符使用方法的相关资料,文中通过代码介绍的... 目录一、python环境基础命令【Windows】1、检查Python是否安装2、 查看Python的安

Python UV安装、升级、卸载详细步骤记录

《PythonUV安装、升级、卸载详细步骤记录》:本文主要介绍PythonUV安装、升级、卸载的详细步骤,uv是Astral推出的下一代Python包与项目管理器,主打单一可执行文件、极致性能... 目录安装检查升级设置自动补全卸载UV 命令总结 官方文档详见:https://docs.astral.sh/

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.

Python中help()和dir()函数的使用

《Python中help()和dir()函数的使用》我们经常需要查看某个对象(如模块、类、函数等)的属性和方法,Python提供了两个内置函数help()和dir(),它们可以帮助我们快速了解代... 目录1. 引言2. help() 函数2.1 作用2.2 使用方法2.3 示例(1) 查看内置函数的帮助(

Python虚拟环境与Conda使用指南分享

《Python虚拟环境与Conda使用指南分享》:本文主要介绍Python虚拟环境与Conda使用指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、python 虚拟环境概述1.1 什么是虚拟环境1.2 为什么需要虚拟环境二、Python 内置的虚拟环境工具

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

Python pip下载包及所有依赖到指定文件夹的步骤说明

《Pythonpip下载包及所有依赖到指定文件夹的步骤说明》为了方便开发和部署,我们常常需要将Python项目所依赖的第三方包导出到本地文件夹中,:本文主要介绍Pythonpip下载包及所有依... 目录步骤说明命令格式示例参数说明离线安装方法注意事项总结要使用pip下载包及其所有依赖到指定文件夹,请按照以