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

简介: 爬楼梯都还记得吧?f(x)=f(x-1)+f(x-2),斐波那契数列。本题是爬楼梯的变形题:爬楼梯的最少成本

image.png

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

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


上题!!

image.png

数组的每个下标作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值 cost[i](下标从 0 开始)。

每当爬上一个阶梯都要花费对应的体力值,一旦支付了相应的体力值,就可以选择向上爬一个阶梯或者爬两个阶梯。

请找出达到楼层顶部的最低花费。在开始时,你可以选择从下标为 0 或 1 的元素作为初始阶梯。


示例 1:

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


示例 2:

输入: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 循环,然后套用上述公式即可。


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]
}

image.png


第三反应



小结:

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

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


相关文章
|
算法 测试技术 C++
【动态规划】【数学】【C++算法】1449. 数位成本和为目标值的最大数字
【动态规划】【数学】【C++算法】1449. 数位成本和为目标值的最大数字
|
3月前
|
算法 机器人 定位技术
【VRPTW】基于matlab秃鹰算法BES求解带时间窗的骑手外卖配送路径规划问题(目标函数:最优路径成本 含服务客户数量 服务时间 载量 路径长度)(Matlab代码实现)
【VRPTW】基于matlab秃鹰算法BES求解带时间窗的骑手外卖配送路径规划问题(目标函数:最优路径成本 含服务客户数量 服务时间 载量 路径长度)(Matlab代码实现)
119 0
|
2月前
|
机器学习/深度学习 传感器 算法
基于matlab瞬态三角哈里斯鹰算法TTHHO多无人机协同集群避障路径规划(目标函数:最低成本:路径、高度、威胁、转角)(Matlab代码实现)
基于matlab瞬态三角哈里斯鹰算法TTHHO多无人机协同集群避障路径规划(目标函数:最低成本:路径、高度、威胁、转角)(Matlab代码实现)
132 1
|
2月前
|
机器学习/深度学习 并行计算 算法
基于改进的粒子群算法PSO求解电容器布局优化问题HV配电中的功率损耗和成本 IEEE34节点(Matlab代码实现)
基于改进的粒子群算法PSO求解电容器布局优化问题HV配电中的功率损耗和成本 IEEE34节点(Matlab代码实现)
|
2月前
|
算法 安全 数据可视化
基于多目标鲸鱼优化算法(NSWOA)求解地铁隧道竖向位移和成本的双目标求解(以铁道科学报与工程文章为例)研究(Matlab代码实现)
基于多目标鲸鱼优化算法(NSWOA)求解地铁隧道竖向位移和成本的双目标求解(以铁道科学报与工程文章为例)研究(Matlab代码实现)
|
3月前
|
机器学习/深度学习 算法 数据挖掘
【配送路径规划】基于螳螂虾算法MShOA求解带时间窗的骑手外卖配送路径规划问题(目标函数:最优路径成本 含服务客户数量 服务时间 载量 路径长度)研究(Matlab代码实现)
【配送路径规划】基于螳螂虾算法MShOA求解带时间窗的骑手外卖配送路径规划问题(目标函数:最优路径成本 含服务客户数量 服务时间 载量 路径长度)研究(Matlab代码实现)
152 0
|
3月前
|
算法 Python
【配送路径规划】基于遗传算法求解带时间窗的电动汽车配送路径规划(目标函数:最小成本;约束条件:续驶里程、额定载重量、数量、起始点)研究(Matlab代码实现)
【配送路径规划】基于遗传算法求解带时间窗的电动汽车配送路径规划(目标函数:最小成本;约束条件:续驶里程、额定载重量、数量、起始点)研究(Matlab代码实现)
127 0
|
5月前
|
存储 自然语言处理 算法
基于内存高效算法的 LLM Token 优化:一个有效降低 API 成本的技术方案
本文探讨了在构建对话系统时如何通过一种内存高效算法降低大语言模型(LLM)的Token消耗和运营成本。传统方法中,随着对话深度增加,Token消耗呈指数级增长,导致成本上升。
476 7
基于内存高效算法的 LLM Token 优化:一个有效降低 API 成本的技术方案
|
机器学习/深度学习 传感器 安全
【VRP问题】基于遗传算法求解带容量的车辆路径规划问题(优化目标:运输成本)附Matlab代码
【VRP问题】基于遗传算法求解带容量的车辆路径规划问题(优化目标:运输成本)附Matlab代码
|
算法 测试技术 C#
C++前缀和算法:合并石头的最低成本原理、源码及测试用例(二)
C++前缀和算法:合并石头的最低成本原理、源码及测试用例