我是靠谱客的博主 雪白荔枝,最近开发中收集的这篇文章主要介绍猿创征文 |【算法面试入门必刷】动态规划-线性dp(一)前言算法入门刷题训练小结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

  • 前言
  • 算法入门刷题训练
    • 题目AB34:跳台阶
      • 题目分析
      • 理论准备
      • 题解
  • 小结

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

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

【算法入门必刷】动态规划-线性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];
    }
};

当提交成功后,会展示如下界面,那么恭喜这道题目就通过了!
在这里插入图片描述

小结

祝愿所有的伙伴都能拿到自己心仪的Offer!????伙伴们点击右边链接立刻开启刷题吧:牛客——刷题网

最后

以上就是雪白荔枝为你收集整理的猿创征文 |【算法面试入门必刷】动态规划-线性dp(一)前言算法入门刷题训练小结的全部内容,希望文章能够帮你解决猿创征文 |【算法面试入门必刷】动态规划-线性dp(一)前言算法入门刷题训练小结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(57)

评论列表共有 0 条评论

立即
投稿
返回
顶部