前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >算法简单题,吾辈重拳出击 - 爬楼梯的最少成本

算法简单题,吾辈重拳出击 - 爬楼梯的最少成本

作者头像
掘金安东尼
发布2022-08-22 09:20:49
3760
发布2022-08-22 09:20:49
举报
文章被收录于专栏:掘金安东尼

爬楼梯都还记得吧?f(x)=f(x-1)+f(x-2),斐波那契数列。

本题是爬楼梯的变形题:爬楼梯的最少成本

上题!!

数组的每个下标作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值 cost[i](下标从 0 开始)。 每当爬上一个阶梯都要花费对应的体力值,一旦支付了相应的体力值,就可以选择向上爬一个阶梯或者爬两个阶梯。 请找出达到楼层顶部的最低花费。在开始时,你可以选择从下标为 0 或 1 的元素作为初始阶梯。

示例 1:

代码语言:javascript
复制
输入:cost = [10, 15, 20]
输出:15
解释:最低花费是从 cost[1] 开始,然后走两步即可到阶梯顶,一共花费 15 。

示例 2:

代码语言:javascript
复制
输入:cost = [1, 100, 1, 1, 1, 100, 1, 1, 100, 1]
输出:6
解释:最低花费方式是从 cost[0] 开始,逐个经过那些 1 ,跳过 cost[3] ,一共花费 6 。

第一反应

这题目读完有一种将动态规划 DP(做比较得最大值或最小值)和 爬楼梯斐波那契结合的感觉。

爬楼梯都是从后面往前想,最后一台阶 = 前面一台阶+1步 或者 前面一台阶+2步

台阶是 n 阶,到达阶顶是 n+1

到达第 n 阶的最小花费等于(到达第 n-1 阶的最小花费和在 n-1 阶花费的和)与(到达第 n-2 阶的最小花费和在 n-2 阶花费的和)二者的最小值。

怎么理解?因为到达第 n 阶的花费是不包括 n 那一阶的花费的,只包含它前面那一阶的花费和在这一阶之前的最小花费的。前一阶,可能是相距 1 步,也可能是相距 2 步。

转化为代码即:

less[n] = Math.min(less[n-1]+cost[n-1],less[n-2]+cost[n-2])

对吧,和预测一致,动态规划 DP 比较值,以及斐波那契数列的思路结合。

第二反应

斐波那契一般就手动定义初始项就好了,本题的初始阶梯,比如数组 [1],[1,1],都是可以分别跨一步、两步登到阶梯顶部,所以不需要花费,花费为 0 ;

即 less[0]=0 、 less[1]=0

剩下的就用一层 for 循环,然后套用上述公式即可。

代码语言:javascript
复制
var minCostClimbingStairs = function(cost) {
    let less = []
    less[0]=0
    less[1]=0
    for(let n=2;n<cost.length;n++){
        less[n] = Math.min(less[n-1]+cost[n-1],less[n-2]+cost[n-2])
    }
    return less[cost.length]
}

第三反应

小结:

这题如果不是用动态规划+斐波那契去解,真的就会很麻烦,要考虑的情况太多了。

所以,做算法题第一步是最难的,就是把题目抽象成公式。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-08-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第一反应
  • 第二反应
  • 第三反应
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档