代码随想录算法训练营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

相关文章

51单片机学习记录———定时器

文章目录 前言一、定时器介绍二、STC89C52定时器资源三、定时器框图四、定时器模式五、定时器相关寄存器六、定时器练习 前言 一个学习嵌入式的小白~ 有问题评论区或私信指出~ 提示:以下是本篇文章正文内容,下面案例可供参考 一、定时器介绍 定时器介绍:51单片机的定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部完成。 定时器作用: 1.用于计数系统,可

随想录 Day 69 并查集 107. 寻找存在的路径

随想录 Day 69 并查集 107. 寻找存在的路径 理论基础 int n = 1005; // n根据题目中节点数量而定,一般比节点数量大一点就好vector<int> father = vector<int> (n, 0); // C++里的一种数组结构// 并查集初始化void init() {for (int i = 0; i < n; ++i) {father[i] = i;}

RedHat运维-Linux文本操作基础-AWK进阶

你不用整理,跟着敲一遍,有个印象,然后把它保存到本地,以后要用再去看,如果有了新东西,你自个再添加。这是我参考牛客上的shell编程专项题,只不过换成了问答的方式而已。不用背,就算是我自己亲自敲,我现在好多也记不住。 1. 输出nowcoder.txt文件第5行的内容 2. 输出nowcoder.txt文件第6行的内容 3. 输出nowcoder.txt文件第7行的内容 4. 输出nowcode

Javascript高级程序设计(第四版)--学习记录之变量、内存

原始值与引用值 原始值:简单的数据即基础数据类型,按值访问。 引用值:由多个值构成的对象即复杂数据类型,按引用访问。 动态属性 对于引用值而言,可以随时添加、修改和删除其属性和方法。 let person = new Object();person.name = 'Jason';person.age = 42;console.log(person.name,person.age);//'J

uniapp接入微信小程序原生代码配置方案(优化版)

uniapp项目需要把微信小程序原生语法的功能代码嵌套过来,无需把原生代码转换为uniapp,可以配置拷贝的方式集成过来 1、拷贝代码包到src目录 2、vue.config.js中配置原生代码包直接拷贝到编译目录中 3、pages.json中配置分包目录,原生入口组件的路径 4、manifest.json中配置分包,使用原生组件 5、需要把原生代码包里的页面修改成组件的方

Vim使用基础篇

本文内容大部分来自 vimtutor,自带的教程的总结。在终端输入vimtutor 即可进入教程。 先总结一下,然后再分别介绍正常模式,插入模式,和可视模式三种模式下的命令。 目录 看完以后的汇总 1.正常模式(Normal模式) 1.移动光标 2.删除 3.【:】输入符 4.撤销 5.替换 6.重复命令【. ; ,】 7.复制粘贴 8.缩进 2.插入模式 INSERT

零基础STM32单片机编程入门(一)初识STM32单片机

文章目录 一.概要二.单片机型号命名规则三.STM32F103系统架构四.STM32F103C8T6单片机启动流程五.STM32F103C8T6单片机主要外设资源六.编程过程中芯片数据手册的作用1.单片机外设资源情况2.STM32单片机内部框图3.STM32单片机管脚图4.STM32单片机每个管脚可配功能5.单片机功耗数据6.FALSH编程时间,擦写次数7.I/O高低电平电压表格8.外设接口

公共筛选组件(二次封装antd)支持代码提示

如果项目是基于antd组件库为基础搭建,可使用此公共筛选组件 使用到的库 npm i antdnpm i lodash-esnpm i @types/lodash-es -D /components/CommonSearch index.tsx import React from 'react';import { Button, Card, Form } from 'antd'

vcpkg安装opencv中的特殊问题记录(无法找到opencv_corexd.dll)

我是按照网上的vcpkg安装opencv方法进行的(比如这篇:从0开始在visual studio上安装opencv(超详细,针对小白)),但是中间出现了一些别人没有遇到的问题,虽然原因没有找到,但是本人给出一些暂时的解决办法: 问题1: 我在安装库命令行使用的是 .\vcpkg.exe install opencv 我的电脑是x64,vcpkg在这条命令后默认下载的也是opencv2:x6

17.用300行代码手写初体验Spring V1.0版本

1.1.课程目标 1、了解看源码最有效的方式,先猜测后验证,不要一开始就去调试代码。 2、浓缩就是精华,用 300行最简洁的代码 提炼Spring的基本设计思想。 3、掌握Spring框架的基本脉络。 1.2.内容定位 1、 具有1年以上的SpringMVC使用经验。 2、 希望深入了解Spring源码的人群,对 Spring有一个整体的宏观感受。 3、 全程手写实现SpringM