LeetCode-746-使用最小花费爬楼梯-动态规划

news/2024/7/24 8:39:15 标签: leetcode, 动态规划, 算法

题目描述:
给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。
你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。
请你计算并返回达到楼梯顶部的最低花费。

题目链接:LeetCode-746-使用最小花费爬楼梯

解题思路:注释中有详解。

代码实现:

class Solution {
    public int minCostClimbingStairs(int[] cost) {
        // 1. 确定 dp[i] 的含义: dp[i]表示爬到第 i 个位置的最小花费
        // 2. 递推公式:dp[i]=Math.min(dp[i-1]+cost[i-1], dp[i-2]+cost[i-2])
        //            dp[i-1]:再加上向上跳 1步的花费 cost[i-1]
        //            dp[i-2]:再加向上上跳 2步的花费 cost[i-2]
        // 3. 如何初始化:dp[0]=0; dp[1]=0,因为不需要花费体力,开始爬才会产生花费
        // 4. 遍历的方向:从前向后遍历
        if (cost.length==2){
            return Math.min(cost[0], cost[1]);
        }

        int[] dp = new int[cost.length+1];
        dp[0]=0;
        dp[1]=0;
        for (int i = 2; i < dp.length ; i++) {
            dp[i]=Math.min(dp[i-1]+cost[i-1], dp[i-2]+cost[i-2]);
        }
        return dp[dp.length-1];
    }
}

http://www.niftyadmin.cn/n/5025231.html

相关文章

【算法与数据结构】701、LeetCode二叉搜索树中的插入操作

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;这道题关键在于分析插入值的位置&#xff0c;不论插入的值是什么&#xff08;插入值和原有树中的键值都…

postman连接websocket, 建立连接、聊天测试(v8.5.1)

1. postman v8.5版本 以上支持 websocket。 2. 选择websocket请求模块File - New... 3. WebSocketServer.java import org.springframework.stereotype.Component; import javax.websocket.*; import javax.websocket.server.PathParam; import javax.websocket.server.Server…

在 Vue 的 mounted 钩子函数中使用异步函数是否会有风险需要考虑

主要的区别在于: 异步函数 - 使用 await,执行时不会blocking,但获取数据时组件已渲染 同步函数 - 直接返回数据,组件渲染需等待执行结束 使用异步函数的潜在风险: 如果异步请求时间过长,组件会先渲染,导致页面空白或显示不正确 获取数据失败时,无法准确得到失败信息来源 同步…

学点Selenium玩点新鲜~新的一年,让分布式测试有更多玩法

我们都知道 Selenium 是一款在 Web 应用测试领域使用的自动化测试工具&#xff0c;而 Selenium Grid 是 Selenium 中的一大组件&#xff0c;通过它能够实现分布式测试&#xff0c;能够帮助团队简单快速在不同的环境中测试他们的 Web 应用。 分布式执行测试其实并不是一个非常难…

hyperf 十六 session

官网地址&#xff1a;Hyperf 一 安装 //安装源码 composer require hyperf/session:v2.0.20 //创建配置 php bin/hyperf.php vendor:publish hyperf/session 使用redis的话&#xff0c;需要安装redis对应源码。 二 使用 设置中间件 #config/autoload/middlewares.php retu…

CMake使用小结

根据近期的项目开发中对CMake的使用进行一些总结。 CMake主要用于构建C/C的工程项目&#xff0c;能自动配置依赖所依赖的头文件、.lib文件和.dll文件并且配置项目属性。如此&#xff0c;可以实现对项目工程的复用以提高开发效率。感觉CMake中很重要的一个点就是要明白相对路径…

【多线程】ReentrantLock 可重入锁

ReentrantLock 可重入锁 ReentrantLock 也是可重入锁. "Reentrant" 单词的原意就是 "可重入"可重入互斥锁. 和 synchronized 定位类似, 都是用来实现互斥效果, 保证线程安全. ReentrantLock 的用法: lock(): 加锁, 如果获取不到锁就死等.trylock(超时时间…