【动态规划】面试题 08.01. 三步问题
Halo,这里是Ppeua。平时主要更新C++,数据结构算法,Linux与ROS…感兴趣就关注我bua!
文章目录
- 0. 题目解析
- 1. 算法原理
- 1.1 状态表示
- 1.2 状态转移方程
- 1.3初始化
- 1.4 填表顺序
- 1.5 返回值
- 2.算法代码
![在这里插入图片描述](https://img-blog.csdnimg.cn/62d4ab347c0a494a921f9b4f40b8cd3c.png)
🐧 本篇是整个动态规划的入门篇章,题目或许可以通过暴力或者其他方法求解但在这里,我们只讨论与动态规划相关的解法.
🐧 Gitee链接:面试题 08.01. 三步问题
0. 题目解析
题目链接:面试题 08.01. 三步问题
一个小孩一次能上1,2,3层阶梯,求解到n阶台阶时有多少种走法。
1. 算法原理
每个动态规划问题我们都会按照如下方法去分析.
1.1 状态表示
也就是dp数组(也称dp表)中,dp[i]所代表的意思是什么?
这个状态表示怎么来的?
-
分析题目的要求得出来的----按照这题为例 dp[i]等于 走到第n个台阶时所有的走法
-
根据以往做题的经验+题目的要求得出来的(这个我们之后会用到)
-
分析问题中发现重复的子问题 (较难的dp问题的状态表示往往由若干个子状态一起表示)
1.2 状态转移方程
这也就是如何求出dp[i]
我们观察发现,dp[i]可以由前三个台阶推出来.
例如:到台阶4的时候,可以由台阶一,台阶二,台阶三的步数走出来
具体的如下:可以由台阶1跳三格,台阶2跳两格,台阶3跳一格走到(注意这是一次跳的,而不是总共完成这么多格,所以只会有一种方法而不是多种)
所以如果我想要到台阶4的方法数就等于由台阶1的方法数+台阶2的方法数+台阶3的方法数.
所以dp[i]=dp[i-1]+dp[i-2]+dp[i-3]
1.3初始化
核心思想为:保证数组不越界的情况下,完成我们的状态转移方程.
观察我们的状态转移方程,我们会发现,我们需要的值是i的前三个(i-1,i-2,i-3).所以当i=3时,最小位(i-3)此时为0.
这意味着:我们要保证不越界,我们的dp表要从i=3开始填,也就是i=0、1、2都已经初始化完
结合题目所给条件,我们不难发现:
所以初始化为:dp[0]=0,dp[1]=1,dp[2]=2
注意,当题目所给n的范围小于2时,我们访问dp[2]会造成越界.所以需要特判一下
1.4 填表顺序
为了保证填写当前状态的时候,所需要的状态已经计算过了,我们从左向右填
1.5 返回值
根据我们的dp[i]表示走到第i个台阶的方法数,而题目要求我们返回 走到第n个台阶的方法数,所以我们直接返回dp[n]即可
2.算法代码
class Solution {
int N=1000000007;
public:int waysToStep(int n) {vector<int>dp(n+1,0);if(n==1||n==2)return n;dp[0]=0,dp[1]=1,dp[2]=2,dp[3]=4;//o(n)时间复杂度 o(n)时间复杂度for(int i=4;i<=n;i++){dp[i]=((dp[i-1]%N+dp[i-2])%N+dp[i-3]%N)%N;}return dp[n];}
};
时间复杂度:o(n)
空间复杂度:o(n)
可以使用滚动数组的方法将空间复杂度优化到o(1)级别.
观察状态转移方程.我们发现,虽然我们开辟了n个大小的空间,但我们计算第i个的时候,只会用到前三个的值,这意味着在[0,i-4]这段区间中的数组空间都是浪费的.所以我们可以单独创建三个变量来表示所需要的状态值,来取代这个数组,从而优化空间复杂度.
空间,但我们计算第i个的时候,只会用到前三个的值,这意味着在[0,i-4]这段区间中的数组空间都是浪费的.所以我们可以单独创建三个变量来表示所需要的状态值,来取代这个数组,从而优化空间复杂度.
相关文章:
![](https://img-blog.csdnimg.cn/img_convert/f95cbbf418c1569e75175f80d75d9bb3.jpeg)
【动态规划】面试题 08.01. 三步问题
Halo,这里是Ppeua。平时主要更新C,数据结构算法,Linux与ROS…感兴趣就关注我bua! 文章目录 0. 题目解析1. 算法原理1.1 状态表示1.2 状态转移方程1.3初始化1.4 填表顺序1.5 返回值 2.算法代码 🐧 本篇是整个动态规划的…...
![](https://img-blog.csdnimg.cn/img_convert/95f13f2b2f90e7fbeefc40a91778e73b.jpeg)
mac常见问题(三) macbook键盘溅上水怎么办?
多朋友在使用mac的时候难免会发生一些小意外,例如说本期要为大家说的macbook键盘溅上水或者其他的液体怎么办?不清楚的同学赶快get这项技能吧! 如果你不小心给你的MacBook键盘上溅了水或者其他液体,你需要超级快的把表面的液体清理…...
![](https://www.ngui.cc/images/no-images.jpg)
安全测试目录内容合集
基础知识 安全测试基础知识 安全测试-django防御安全策略 HTTP工作原理 靶场DVWA 安全测试网站-DWVA下载安装启动 DVWA-Command Injection DVWA-5.File upload 文件上传漏洞 DVWA-9.Weak Session IDs DVWA-XSS (Stored) DVWA-10.XSS (DOM)...
![](https://img-blog.csdnimg.cn/0d05f81e0c1b463d8bba7f30d806e28e.png#pic_center)
数据结构和算法(1):开始
算法概述 所谓算法,即特定计算模型下,旨在解决特定问题的指令序列 输入 待处理的信息(问题) 输出 经处理的信息(答案) 正确性 的确可以解决指定的问题 确定性 任一算法都可以描述为一个由基本操作组成的序…...
![](https://img-blog.csdnimg.cn/cee4289693334075859d06a31c06dcd4.jpeg)
线下沙龙 | 从营销扩张到高效回款,游戏公司如何通过全链路运营实现高质量出海!
游戏出海,是近些年来中国产业的风暴出口,在2020至2023年期间保持着绝对的领航地位。公开数据显示,过去4年里,游戏在各类App出海份额中总体保持稳定,高达 64.9%。 但毕竟海外是陌生的市场,我们见过太多折戟沉…...
![](https://img-blog.csdnimg.cn/img_convert/bf8792720d0275b9ab029015d090cffc.png)
使用Jekyll + GitHub Pages搭建个人博客
本文将介绍如何使用Jekyll搭建个人博客,并部署在GitHub Pages上。 1.简介 Jekyll是一个强大的静态网站生成器,可以将Markdown、HTML、Liquid模板等文件转换为静态网站。Jekyll支持模板引擎、主题、插件、集成GitHub Pages等特性,可以帮助用…...
![](https://img-blog.csdnimg.cn/a59c34aa22cb470ca91b7cd62aae2358.png)
⽹络与HTTP 笔试题精讲1
OSI七层与TCP/IP 这个就是OSI参考模型,⽽实际我们现在的互联⽹世界是就是这个理论模型的落地叫做TCP/IP协议 TCP的三次握⼿与四次挥⼿ 客户端想要发送数据给服务端,在发送实际的数据之前,需要先在两端之间建⽴连接,数据发完以后也需要将该连接关闭。建⽴连接的过程就是我们…...
![](https://img-blog.csdnimg.cn/a27cdb5b530641a69a9e167dd62b0f2b.png)
亲测有效:虚拟机安装gcc,报错Could not retrieve mirrorlist http://mirrorlist.centos.org
(网卡配置资料) 原因: 网络问题 报错详情: One of the configured repositories failed (未知),and yum doesnt have enough cached data to continue. At this point the onlysafe thing yum can do is fail. There are a few …...
![](https://img-blog.csdnimg.cn/30feada52fb149c8ad5ed1d566e17d44.png#pic_center)
机器人中的数值优化(十二)——带约束优化问题简介、LP线性规划
本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考,主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等,本系列文章篇数较多,不定期更新,上半部分介绍无约束优化,…...
![](https://img-blog.csdnimg.cn/c2cc1940ff6148b19ef810d4e76e3e4d.png)
如何解决使用 ISPC 构建编译项目代码的时候出现_ISPCAlloc、_ISPCLaunch、_ISPCSync的连接器错误
一般在编译 ISPC 代码到时候,构建方法如下: $ ispc add.ispc -o add.o -h add.h $ g main.cpp add.o 但是在一些情况下连接器会报以下错误: $ g main.cpp add.o Undefined symbols for architecture x86_64:"_ISPCAlloc", refer…...
![](https://img-blog.csdnimg.cn/af68c1ab860f4f9fa7cd6f7f406c8260.png)
Hadoop 集群一直处于安全模式,强制退出后出现数据丢失警告。解决方法
文章目录 安全模式相关命令分析集群为什么一直处于安全模式解决方法 安全模式相关命令 # 查看安全模式状态 hdfs dfsadmin -safemode get# 进入安全模式 hdfs dfsadmin -safemode enter# 离开安全模式 hdfs dfsadmin -safemode leave# 强制退出安全模式 hdfs dfsadmin -safemo…...
![](https://img-blog.csdnimg.cn/6a79fc7d3a7543bf828d2dcb3db1a3e2.png)
四旋翼飞行器基本模型(MatlabSimulink)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
![](https://www.ngui.cc/images/no-images.jpg)
P1116 车厢重组(冒泡排序)
题目描述 在一个旧式的火车站旁边有一座桥,其桥面可以绕河中心的桥墩水平旋转。一个车站的职工发现桥的长度最多能容纳两节车厢,如果将桥旋转 180 180 180 度,则可以把相邻两节车厢的位置交换,用这种方法可以重新排列车厢的顺序…...
![](https://img-blog.csdnimg.cn/img_convert/7a0970219a00056a2463ca44c9ad212b.png)
Android逆向学习(番外一)smali2java部分文件无法反编译的bug与修复方法
Android逆向学习(番外一)smali2java部分文件无法反编译的bug与修复方法 一、前言 昨天我和往常一样准备着android逆向(四)的博客,结果发现smali2java对某些文件无法进行逆向,我不知道windows会不会产生这…...
![](https://img-blog.csdnimg.cn/2d219e739abc4f48961a3163f3224e0d.png)
go语言基本操作---三
变量的内存和变量的地址 指针是一个代表着某个内存地址的值。这个内存地址往往是在内存中存储的另一个变量的值的起始位置。Go语言对指针的支持介于java语言和C/C语言之间,它即没有想Java语言那样取消了代码对指针的直接操作的能力,也避免了C/C语言中由…...
![](https://img-blog.csdnimg.cn/4ebfdb66e309443e8ac2332963945071.png#pic_center)
ArcGIS Enterprise + ArcGIS Pro 常用服务类型发布
发布前设置 门户连接 首先Pro需要先连接portal 添加portal门户地址,注意只到WA一级地址,并登录: 登录完成后,右键,设置为活动门户: 1. 发布动态地图服务 关联数据文件夹: 拖拽数据到地图…...
![](https://img-blog.csdnimg.cn/img_convert/bac19964fa206f568e49d8ef2bb8210f.webp?x-oss-process=image/format,png)
优思学院|亲和图案例:寻找六西格玛的项目
什么是亲和图? 亲和图(Affinity Diagram)主要功能在於分类归纳,协助在一堆杂乱无章的资料之中,有系统的归纳出几个大类,以利后续作业。通常先利用头脑风暴(Brainstorming)方式得到大…...
![](https://www.ngui.cc/images/no-images.jpg)
tomcat 的缓存机制
HTTP缓存:Tomcat支持HTTP缓存机制,可以通过设置响应头中的Cache-Control、Expires和ETag等字段来控制缓存策略。这些字段告诉浏览器是否可以缓存响应以及缓存的有效期等信息。 Servlet缓存:Tomcat还提供了Servlet缓存机制,它可以…...
![](https://www.ngui.cc/images/no-images.jpg)
laravel 压缩文件与解压文件
一、引入第三方类 composer require chumper/zipper二、第三方类配置 providers>[Chumper\Zipper\ZipperServiceProvider::class ]aliases > [Zipper > Chumper\Zipper\Zipper::class ]三、压缩解压缩实例 <?php namespace App\Http\Controllers\Upload; use A…...
![](https://www.ngui.cc/images/no-images.jpg)
kind搭建k8s集群用于测试
安装kind 需要先安装go kind基于go开发 #第一种安装方式#修改go源加快下载速度 go env -w GOPROXYhttps://goproxy.cn,direct #直接下载安装kind最新版本 go install sigs.k8s.io/kindlatest #进入GOPATH目录找到bin目录下kind执行程序 移动到环境变量里 mv ./kind /usr/local…...
![](https://img-blog.csdnimg.cn/aa8b756f1d74453a8d1f66d80e86a60b.png)
软件测试人需要掌握的测试知识架构体系(上)
软件计划与可行性研究(问题定义、可行性研究);需求分析;软件设计(概要设计、详细设计);编码;软件测试;运行与维护。 一、软件的生命周期(SDLC) 1、生存周期划分 各阶段…...
![](https://img-blog.csdnimg.cn/79c47ea4f43e450cae8f5a5a84e08180.png)
QT数据库,实现数据库增删改查
QT关于数据库的相关概念 QT将数据库分为三个层次: 数据库驱动层:QSqlDriver、QSqlDriverCreator、QSqlDriverCreatorBase、QSqlDriverPlugin sql接口层:QSqlDatabase、QSqlQuery、QSqlRecord、QSqlError 用户接口层:提供一些模…...
![](https://img-blog.csdnimg.cn/38af7309656640e889e2d683a87808bb.png)
SQL-子查询
SQL 子查询 是指将一个SELECT查询(子查询)的结果用括号括起来作为另一个SQL语句的数据来源或者判断条件...
![](https://img-blog.csdnimg.cn/abeb073ff88541449a723d44dd2dc98f.png)
【8章】Spark编程基础(Python版)
课程资源:(林子雨)Spark编程基础(Python版)_哔哩哔哩_bilibili 第8章 Spark MLlib(6节) 机器学习算法库 (一)MLlib简介 1、机器学习 机器学习可以看做是一门人工智能的科学,该领…...
![](https://img-blog.csdnimg.cn/img_convert/a8af01ea87c6a6accd54ed0b24004d12.png)
桌面应用小程序,一种创新的跨端开发方案
Qt Group在提及2023年有桌面端应用程序开发热门趋势时,曾经提及三点: 关注用户体验:无论您是为桌面端、移动端,还是为两者一起开发应用程序,有一点是可以确定的:随着市场竞争日益激烈,对产品的期…...
![](https://img-blog.csdnimg.cn/7c9ada2421d948a68369053d60e1a193.png)
将本地jar打包到本地maven仓库或maven私服仓库中
将本地jar包打包到本地的maven仓库中的命令: mvn install:install-file -DgroupIdtebie.applib.api -DartifactIdapiclient -Dversion1.0-SNAPSHOT -Dfile本地jar路径 -Dpackagingjar说明: DgroupId pom中的<groupId></groupId> Dartifact…...
![](https://www.ngui.cc/images/no-images.jpg)
java 实现建造者模式
建造者模式(Builder Pattern)是一种创建型设计模式,用于创建一个复杂对象,将对象的构建过程与其表示分离,以便可以使用相同的构建过程来创建不同的表示。在Java中,可以使用建造者模式来构建具有多个属性的对…...
![](https://img-blog.csdnimg.cn/bff2de5f2f214a4fab4052f68d804263.png)
串行FIR滤波器
串行 FIR 滤波器设计 串行设计,就是在 16 个时钟周期内对 16 个延时数据分时依次进行乘法、加法运算,然后在时钟驱动下输出滤波值。考虑到 FIR 滤波器系数的对称性,计算一个滤波输出值的周期可以减少到 8 个。串行设计时每个周期只进行一次乘…...
![](https://img-blog.csdnimg.cn/6f2a430bf1004944a51ae4203b5fd577.png)
Spring Boot 整合 Shiro(后端)
1 Shiro 什么是 Shiro 官网: http://shiro.apache.org/ 是一款主流的 Java 安全框架,不依赖任何容器,可以运行在 Java SE 和 Java EE 项目中,它的主要作用是对访问系统的用户进行身份认证、 授权、会话管理、加密等操作。 …...
![](https://img-blog.csdnimg.cn/4a0a61143f56446caaec0ec2f1be4067.gif)
面试中的自我介绍:首印象决定一切
🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…...
![](https://img-blog.csdnimg.cn/2021040210133836.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0N5YmVyVmVpbg==,size_16,color_FFFFFF,t_70#pic_center)
黄石做企业网站/成人就业技术培训机构
本文转载自News BTC对CROSS的特别报道。以下为翻译的原文: 拍卖是财产权利转让的最古老方式之一。自从人类有了剩余价值的流动性需求,就有了拍卖这种方式。说到捡漏收藏界尽知的当属“明成化斗彩鸡缸杯”了。它的传承过程,似乎就是一部“拣大…...
![](/images/no-images.jpg)
如何将网站做成app/网站设计优化
练习 30 Else 和 if在上个练习中你学到了一些 if 语句,思考了它的含义和作用。在你学习更多内容之前,我会解释一下上个附加练习中的问题。首先确定你做了那些练习。1. 你认为 if 对它下面的代码起什么作用?if 语句在代码中创建了一个“分支”…...
广州建设网站是什么/爱站网长尾关键词挖掘
有的人能力不如你,人生阅历不如你,技巧不如你,亲和力不如你,形象不如你,但成绩比你好、收入比你高!是什么限制了你的能力和成就?1、否定性思想比如:不可能、没办法、怎么会ÿ…...
![](/images/no-images.jpg)
宁夏信用建设官方网站/最新百度新闻
sp_executesql 可能用 exec sp_executesql sqltext,paramstring,urlM_ID output 来得到动态执行中返回值,sqltext的长度可能超过了4000字符,可以使用nvarchar(max)解决,类似于: declare request1 nvarchar(4000) declare request2…...
![](/images/no-images.jpg)
做纸巾定制的网站/制作一个网站需要多少费用
题目均来自牛客网 1、 有以下代码片段: String str1"hello"; String str2"he" new String("llo"); System.out.println(str1str2); 请问输出的结果是:false - 解 类似问题连接: String is immutable. W…...
![](/images/no-images.jpg)
制作 网站/百度快照优化排名推广怎么做
access总结 在access数据库管理系统中,数据库是一个基础,它主要用来存储数据库应用系统中的其他数据库对象,也就是说,构成数据库应用系统的其他对象都存储在数据库中。 access第二章书中介绍使用access创建数据库的各种方法以及数…...