猿创征文 |【算法面试入门必刷】动态规划-线性dp(一)

这篇具有很好参考价值的文章主要介绍了猿创征文 |【算法面试入门必刷】动态规划-线性dp(一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

📦个人主页:一二三o-0-O的博客
🏆技术方向:C/C++客户端资深工程师(直播+音视频剪辑)
👨‍💻作者简介:数据结构算法与音视频领域创作者
📒 系列专栏:牛客网面试必刷
📣专栏目标:帮助伙伴们通过系统训练,掌握数据结构与算法,收获心仪Offer
📝推荐一个找工作神器:牛客刷题网 【面试经验|实习招聘内推,求职就业一战解决】
🧡如果对您有帮助的话,欢迎点赞👍收藏📂,关注不迷路

【算法入门必刷】数据结构-栈篇系列文章:
【算法入门必刷】数据结构-栈(一)
【算法入门必刷】数据结构-栈(二)
【算法入门必刷】数据结构-栈(三)
【算法入门必刷】数据结构-栈(四)
【算法入门必刷】数据结构-栈(五)
【算法入门必刷】数据结构-栈(六)

【算法入门必刷】动态规划-线性dp篇系列文章:
【算法面试入门必刷】动态规划-线性dp(一)
【算法面试入门必刷】动态规划-线性dp(二)
【算法面试入门必刷】动态规划-线性dp(三)

前言

开启刷题,请点击右边链接进行跳转点击这里

猿创征文 |【算法面试入门必刷】动态规划-线性dp(一),# 牛客网面试必刷,算法,面试,动态规划,职场和发展,跳台阶

算法入门刷题训练

题目AB34:跳台阶

题目分析

描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个 n 级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
数据范围:1≤n≤40
要求:时间复杂度:O(n)O(n) ,空间复杂度: O(1)O(1)

这道跳台阶的题目属于动态规划的入门题目,起初可以通过类似的入门题目的训练达到熟练掌握DP解题步骤的目的。分析题目可知,青蛙跳上一个n级台阶一共有两种方式:一个是从n-1阶台阶跳上来,一个是从n-2阶台阶上跳上来。因此我们只要求出跳上n-1阶台阶的方式以及跳上n-2阶台阶的方式,就得出了最后的答案,因此类推公式即:f(n) = f(n-1) + f(n-2)

理论准备

任何算法都有相对应的算法模板或者有规律的解题步骤。对于动态规划来讲,做DP相关的算法题要熟练掌握下面DP解题步骤,这样有助于在面对到各种各样的题目时能够提高解题效率:

DP解题步骤:

  1. 首先要确定dp数组:是一维,二维还是三维;以及下标的含义是什么?
  2. 根据确定好的dp数组,给出递推公式,也叫状态转移方程。
  3. 确定dp数组是否需要初始化,初始化为多少。
  4. 确定遍历的顺序;这一步在背包相关的DP题目中非常重要。
  5. 根据测试用例进行验证

题解

具体的解决方案如下:

  1. 首先确定dp数组:是一维,二维还是三维;以及下标的含义是什么?
// 这里使用一维dp即可
// dp[i] 表示青蛙跳上一个i级台阶总共有dp[i]种跳法
vector<int> dp(number+1);
  1. 根据确定好的dp数组,给出递推公式。
// 根据题目分析我们得出了以下递推公式
dp[i] = dp[i-1] + dp[i-2];
  1. 确定dp数组是否需要初始化,初始化为多少。
// 根据本题的边界条件,需要特殊处理下标小于3的dp值
dp[0] = 0;
dp[1] = 1;
dp[2] = 2;
  1. 确定遍历的顺序;这一步在背包相关的DP题目中非常重要。
// 本题从小到大遍历即可
for(int i{3};i <= number;++i){
    dp[i] = dp[i-1] + dp[i-2];
}
  1. 根据测试用例进行验证:选择所有的测试用例带入验证即可。

  2. 完整代码如下:

class Solution {
public:
    int jumpFloor(int number) {
        if(number <= 2){
            return number;
        }
        vector<int> dp(number+1);
        
        dp[0] = 0;
        dp[1] = 1;
        dp[2] = 2;
        
        for(int i{3};i <= number;++i){
            dp[i] = dp[i-1] + dp[i-2];
        }
        
        return dp[number];
    }
};

当提交成功后,会展示如下界面,那么恭喜这道题目就通过了!
猿创征文 |【算法面试入门必刷】动态规划-线性dp(一),# 牛客网面试必刷,算法,面试,动态规划,职场和发展,跳台阶

小结

祝愿所有的伙伴都能拿到自己心仪的Offer!📣伙伴们点击右边链接立刻开启刷题吧:牛客——刷题网文章来源地址https://www.toymoban.com/news/detail-778580.html

到了这里,关于猿创征文 |【算法面试入门必刷】动态规划-线性dp(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 算法自学__线性动态规划

    某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此

    2023年04月09日
    浏览(26)
  • C++动态规划-线性dp算法

    莫愁千里路 自有到来风 CSDN 请求进入专栏                                    X 是否进入《 C++ 专栏》? 确定 目录  线性dp简介 斐波那契数列模型  第N个泰波那契数 思路: 代码测试:  三步问题 思路: 代码测试: 最小花费爬楼梯 思路: 代码测试:  路径问题 数字三

    2024年02月19日
    浏览(36)
  • 算法基础复盘笔记Day10【动态规划】—— 线性DP

    ❤ 作者主页:欢迎来到我的技术博客😎 ❀ 个人介绍:大家好,本人热衷于 Java后端开发 ,欢迎来交流学习哦!( ̄▽ ̄)~* 🍊 如果文章对您有帮助,记得 关注 、 点赞 、 收藏 、 评论 ⭐️⭐️⭐️ 📣 您的支持将是我创作的动力,让我们一起加油进步吧!!!🎉🎉 1. 题目

    2023年04月21日
    浏览(69)
  • acwing算法基础之动态规划--线性DP和区间DP

    线性DP:状态转移表达式存在明显的线性关系。 区间DP:与顺序有关,状态与区间有关。 题目1 :数字三角形。 解题思路:直接DP即可, f[i][j] 可以来自 f[i-1][j] + a[i][j] 和 f[i-1][j-1] + a[i][j] ,注意 f[i-1][j] 不存在的情况(最后一个点)和 f[i-1][j-1] 不存在的情况(第一个点)。

    2024年02月04日
    浏览(40)
  • C/C++ 动态规划面试算法题

    https://blog.csdn.net/qq_41277628/article/details/113322136 输入:[7,1,5,3,6,4] 输出:5 解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。 给定

    2024年02月07日
    浏览(29)
  • 猿创征文 | Shell编程【上篇】

    目录 1,Shell编程 1.1:简介 1.1.1:shell解释器 1.2:快速入门 1.2.1:编写脚本 1.2.2:执行shell脚本 1.3:shell变量 1.3.1:简介 1.3.2:使用变量 1.3.3:删除变量 1.3.4:只读变量  1.4:字符串 1.4.1:单引号 1.4.2:双引号  1.4.3:获取字符串长度   1.4.4:提取子字符串  1.5:传递参数 1

    2024年02月02日
    浏览(49)
  • 猿创征文 |【Linux】常用命令

    🍁 博客主页: 👉@不会压弯的小飞侠 ✨ 欢迎关注: 👉 点赞 👍 收藏 ⭐ 留言 ✒ ✨ 系列专栏: 👉Linux专栏 ✨ 欢迎加入社区: 👉不会压弯的小飞侠 ✨ 人生格言:知足上进,不负野心。 🔥 欢迎大佬指正,一起学习!一起加油! command [-options] [parameter] command:命令名 [-o

    2024年01月16日
    浏览(31)
  • 猿创征文|【HTML】标签学习之路

    💖 目录 一、HTML语法规范 1.基本语法概述 2.标签关系 二、HTML基本结构标签 1.第一个HTML页面 2.HTML基本结构标签总结 1.基本语法概述 html是由尖括号包围的,列如: html 。 html标签通常是成对出现的,列如:html和/html,我们称为 双标签 。标签对里的第一个标签是开始标

    2024年01月16日
    浏览(33)
  • 猿创征文|ZooKeeper(伪)集群搭建

    前言:zookeeper作为一款分布式协调中间件,其重要性不言而喻,因此需要保证其高可用性。所以一般都会搭建zookeeper集群,今天叶秋带领大家在一台服务器上搭建伪集群。 目录 1、 搭建要求 2、 准备工作 3、 配置集群  4 启动集群  5 模拟集群异常 1、 搭建要求 真实的集群是

    2024年02月01日
    浏览(61)
  • 以太坊是什么?|猿创征文

    以太坊是一个可编程、可视化、更易用的区块链,它允许任何人编写智能合约和发行代币。 在以太坊(Ethereum)出现之前,各种区块链应用的功能非常有限,例如,比特币和其他加密货币都只是纯粹的数字货币。 以太坊(Ethereum)创始人Vitalik Buterin将以太坊(Ethereum)设想为开发人员

    2024年02月02日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包