746. Min Cost Climbing Stairs最小花费上楼梯Java

给定一个整数数组cost,其中cost[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。

约束:
2 <= cost.length <= 1000
0 <= cost[i] <= 999

思路
和70题爬楼梯差不多, 当前步数等于前两个的最小值+现在的cost。curStep=Min(preStep+prepreStep)+curCost

  1. 因为题中说cost.length长度>=2, 所以动态规划(Dynamic Programming)的时候i从1开始, 定义pre1=0和pre2=cost[0]
  2. 选择前两个中的小的+curCost, 然后将pre1和pre2更新
  3. 最后返回的时候也要返回pre1和pre2中最小的那个
class Solution {
    public int minCostClimbingStairs(int[] cost) {
        int pre1 = 0, pre2 = cost[0];
        for (int i = 1; i < cost.length; i++) {
            int temp = Math.min(pre1,pre2)+cost[i];
            pre1 = pre2;
            pre2=temp;
        }
        return Math.min(pre1,pre2);
    }
}

时间复杂度O(n)因为只遍历数组一次

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值