当前位置: 首页 > news >正文

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

一、动态规划基础理论

动态规划五部曲:

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

二、509. 斐波那契数

class Solution {
    public int fib(int n) {
        if(n<=1) return n;
        int[] dp = new int[2];
        dp[0] = 0;
        dp[1] = 1;
        for(int i=2 ; i<=n ;i++){
            int dpi=dp[0]+dp[1];
            dp[0]=dp[1];
            dp[1]=dpi;
        }
        return dp[1];
    }
}

二、70. 爬楼梯

class Solution {
    public int climbStairs(int n) {
        if(n<=2)  return n;
        int[] dp = new int[3];
        dp[1] = 1;
        dp[2] = 2;
        for(int i = 3; i<=n ; i++){
            int dpi = dp[1] + dp[2];
            dp[1] = dp[2];
            dp[2] = dpi;
        }
        return dp[2];
    }
}

三、746. 使用最小花费爬楼梯

从0或1处开始,说明走到0或1的花费都是0,后面每一步 是前两个位置的(历史花费加上迈出这一个台阶的花费)的最小值。

class Solution {
    public int minCostClimbingStairs(int[] cost) {
        int dp0 = 0;
        int dp1 = 0;
        for(int i = 2 ; i<=cost.length ; i++){
            int dpi = Math.min(dp0+cost[i-2],dp1+cost[i-1]);
            dp0 = dp1;
            dp1 = dpi;
        }
        return dp1;
    }
}

相关文章:

  • 【Git】Git基本操作
  • 学习threejs,使用LineBasicMaterial基础线材质
  • Vue中实现大文件的切片并发下载和下载进度展示
  • Spring Boot 的事务回滚
  • 【MySQL_02】安装(8.4.4LTS : Windows + Linux)
  • 在S32K3上实现SOC的神经网络算法的可行性
  • pyside6学习专栏(十):在PySide6中使用vtk模块绘制点、文本、线、三角形面、四面体、三棱柱、四棱锥等三维的基本元素对象
  • 多线程-线程本地变量ThreadLocal
  • Avalonia 中文乱码
  • C 语言数据结构(一):时/空间复制度
  • java环境部署
  • git修改本地用户名和邮箱和凭据
  • 171. Excel 表列序号
  • C++24--右值引用C++11新特性
  • 前端基础之组件自定义事件
  • Web服务器配置
  • PX4中的DroneCAN的实现库Libuavcan及基础功能示例
  • 利用行波展开法测量横观各向同性生物组织的生物力学特性|文献速递-医学影像人工智能进展
  • Web3 的未来:去中心化如何重塑互联网
  • 美颜SDK架构揭秘:人脸美型API的底层实现与优化策略
  • 汤加附近海域发生6.4级地震
  • 跨文化戏剧的拓荒者与传承者——洪深与复旦剧社的百年回响
  • 经济日报:美国滥施汽车关税损人不利己
  • 茅台1935今年动销达到预期,暂无赴港上市计划!茅台业绩会回应多个热点
  • 2024年度全国秋粮收购达3.45亿吨
  • 俄总统新闻秘书:普京提议谈判表明俄寻求和平解决方案意愿