当前位置:网站首页>746. 使用最小花费爬楼梯-动态规划

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

2022-06-23 05:48:00 Mr Gao

746. 使用最小花费爬楼梯

给你一个整数数组 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 。

这一题看似很复杂,其实。我们需要抓住一个点,那就是一个台阶一定由前两个其中一个上来的,我们只需要计算那个cost更小,
解题代码如下:

下面是优化后的代码:

int minCostClimbingStairs(int* cost, int costSize) {
    
    int dp[costSize];
    dp[0] = cost[0];
    dp[1] = cost[1];
    for (int i = 2; i <= costSize-1; i++) {
    
        dp[i] = fmin(dp[i - 1] , dp[i - 2] )+cost[i];
    }
    return fmin(dp[costSize-1],dp[costSize-2]);
}


原网站

版权声明
本文为[Mr Gao]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_43327597/article/details/125415422