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

leetcode746. 使用最小花费爬楼梯,动态规划

leetcode746. 使用最小花费爬楼梯

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

示例 1:
输入:cost = [10,15,20]
输出:15
解释:你将从下标为 1 的台阶开始。

  • 支付 15 ,向上爬两个台阶,到达楼梯顶部。
    总花费为 15 。

示例 2:
输入:cost = [1,100,1,1,1,100,1,1,100,1]
输出:6
解释:你将从下标为 0 的台阶开始。

  • 支付 1 ,向上爬两个台阶,到达下标为 2 的台阶。
  • 支付 1 ,向上爬两个台阶,到达下标为 4 的台阶。
  • 支付 1 ,向上爬两个台阶,到达下标为 6 的台阶。
  • 支付 1 ,向上爬一个台阶,到达下标为 7 的台阶。
  • 支付 1 ,向上爬两个台阶,到达下标为 9 的台阶。
  • 支付 1 ,向上爬一个台阶,到达楼梯顶部。
    总花费为 6 。

在这里插入图片描述

目录

  • leetcode746. 使用最小花费爬楼梯
  • 题目分析
  • 算法介绍
  • 算法步骤
  • 算法流程
  • 算法代码
  • 算法分析
  • 相似题目

题目分析

这是一个关于动态规划的问题。题目要求实现一个函数minCostClimbingStairs,该函数接受一个整数数组cost,并返回到达楼梯顶部的最小花费。数组的每个元素代表到达楼梯第i阶的代价。

算法介绍

为了解决这个问题,我们可以使用动态规划。动态规划的关键在于找到一个状态转移方程,用于计算到达每一阶楼梯的最小花费。

算法步骤

  1. 初始化一个长度为size+1的数组dp,用于存储到达每一阶楼梯的最小花费。
  2. 初始化dp[0]dp[1]为0,因为起始点不需要花费。
  3. 从第2阶开始,对于每个阶数i,计算到达第i阶的最小花费,这可以通过取到达第i-1阶和第i-2阶的最小花费加上第i-1阶和第i-2阶的代价来得到。
  4. 最后,返回dp[size],即到达楼梯顶部的最小花费。

算法流程

开始
初始化 dp, size
dp 0 = 0, dp 1 = 0
for i=2 to size
dp i = min dp i-1 + cost i-1, dp i-2 + cost i-2
return dp size
结束

算法代码

class Solution {
public:
    int minCostClimbingStairs(vector<int>& cost) {
    int size=cost.size();
    vector<int> dp(size+1,0);
    dp[0]=0;
    dp[1]=0;
    for(int i=2;i<=size;i++)
    {
        dp[i]=min((dp[i-1]+cost[i-1]),(dp[i-2]+cost[i-2]));
    }
    return dp[size];
    }
};

算法分析

  • 时间复杂度:O(n),其中n是数组cost的长度。我们只需要遍历数组一次。
  • 空间复杂度:O(n),因为使用了额外的数组空间。
  • 易错点
    • 确保正确初始化dp数组。
    • 在计算状态转移时,确保正确处理边界条件。

相似题目

题目链接
最小花费爬楼梯LeetCode 746
爬楼梯的最小代价LeetCode 120

请注意,以上表格仅为示例,实际链接可能需要根据具体平台和题目编号进行调整。


http://www.kler.cn/a/316523.html

相关文章:

  • 前端:块级元素和行内元素
  • HBase理论_背景特点及数据单元及与Hive对比
  • Elastic Observability 8.16:增强的 OpenTelemetry 支持、高级日志分析和简化的入门流程
  • 《新智慧》期刊的征稿范围主要包括哪些方面?
  • LabVIEW开发相机与显微镜自动对焦功能
  • Spring框架之观察者模式 (Observer Pattern)
  • Uniapp低版本的安卓不能用解决办法
  • Qt_窗口界面QMainWindow的介绍
  • Deep Guided Learning for Fast Multi-ExposureImage Fusion
  • 对接空号检测平台可以降低成本吗
  • 动手学深度学习(pytorch)学习记录32-稠密连接网络(DenseNet)[学习记录]
  • Vue | watch监听
  • IDEA Project不显示/缺失文件
  • 手机在网状态查询接口如何用PHP进行调用?
  • AWS 管理控制台
  • Apache APISIX学习(1):介绍、docker启动
  • Java是怎么处理死锁的
  • 006——队列
  • 带线无人机现身俄罗斯抗干扰技术详解
  • HTML5 Video标签的属性、方法和事件汇总,以及常用视频插件推荐
  • 深蓝学院-- 量产自动驾驶中的规划控制算法 小鹏
  • G - Merchant Takahashi / F - Useless for LIS
  • mysql学习教程,从入门到精通,TOP 和MySQL LIMIT 子句(15)
  • 本地连线上Redis访问不通
  • SpringBoot权限认证-Sa-Token的使用与详解
  • C++第十二节课 模板初阶和string引入