当前位置:首页 > 力扣 > 力扣746:三步通关最小花费爬楼梯

力扣746:三步通关最小花费爬楼梯

2周前 (05-16)

力扣746:三步通关最小花费爬楼梯 动态规划 算法 力扣 C++ 第1张

题目解析:

站在楼梯的某个台阶时,需要支付当前台阶对应的体力值cost[i],之后可以选择向上爬1或2个台阶。最终目标是到达‌楼层顶部‌(即数组末尾之后的位置),且初始位置可选择下标0或1的台阶作为起点。要求找出到达顶部的‌最小花费路径‌。例如输入cost=[10,15,20]时,最佳路径是从索引1出发直接跨两步到顶部,总花费15。


解题思路与过程:

1.关键逻辑拆解

    ‌状态定义‌:dp[i]表示到达索引i台阶时的最小累计花费。

‌    初始化设定‌:

        dp[0]=cost[0](必须支付cost[0]才能站在第0级)

        dp[1]=cost[1](同理必须支付cost[1]才能站在第1级)

        dp[2]=min(dp[0],dp[1])(到达索引2时可选前两步中更优路径)

2‌.循环递推‌:

    从i=3开始遍历到cost.size()(即楼梯顶部)

    ‌特殊处理i=3‌:当i-1 == 2时,说明当前处于索引3,此时比较前一步总花费+cost[i-1]与前两步总花费的最小值

    ‌一般情况‌:其他位置比较前一步总花费+cost[i-1]与前两步总花费+cost[i-2]


算法特点

‌1.反向递推终点‌:最终返回dp[cost.size()],该位置代表楼梯外的顶部,其值由前面的递推关系决定。

‌2.边界条件优化‌:通过提前处理dp[2]减少后续分支判断,但for循环内的条件语句增加了代码复杂度。


代码+注释:

class Solution {
public:
    int minCostClimbingStairs(vector<int>& cost) {
        int dp[1001]; // 假设cost长度<=1000,避免动态内存分配
        dp[0] = cost[0]; // 必须支付cost[0]才能站在第0级台阶
        dp[1] = cost[1]; // 同理,支付cost[1]后才能站在第1级
        dp[2] = min(dp[0], dp[1]); // 到达第2级的最小花费为前两步的较小值
        
        for(int i = 3; i <= cost.size(); i++) { // 从第3级开始推导到顶部
            if(i-1 != 2) { // 非特殊位置时的通用递推
                dp[i] = min(dp[i-1] + cost[i-1], dp[i-2] + cost[i-2]);
            } else { // 处理i=3时的特殊边界情况
                dp[i] = min(dp[i-1] + cost[i-1], dp[i-2]);
            }
        }
        return dp[cost.size()]; // 返回到达顶部的最小花费
    }
};


原创内容 转载请注明出处

分享给朋友:

相关文章

力扣53题:贪心策略与动态规划的完美联姻 三行代码映射算法精髓

力扣53题:贪心策略与动态规划的完美联姻 三行代码映射算法精髓

题目理解在数字的海洋中寻找最具价值的珍珠链:当我们面对一个可能包含正负数的数组时,寻找连续子数组的和最大值就像在波动的股票曲线中捕捉最佳投资时段。问题的核心在于如何处理可能降低总和的负值元素——是忍痛...

用栈结构优雅破解括号匹配难题(力扣20题)

用栈结构优雅破解括号匹配难题(力扣20题)

一、题目重新解读给定一个仅包含 ('、')、'['、']'、'{'、'}' 的字符串,判断其是否有效。有效需满足:1....

力扣740.删除并获得点数 预处理与动态规划的巧妙融合

力扣740.删除并获得点数 预处理与动态规划的巧妙融合

题意解析:给定一组数字,每当你选择一个数字x时,所有等于x-1和x+1的数字都会被自动移除。你需要通过巧妙的选择顺序,最大化获得的点数总和。这个问题可以转化为对离散化数字分布的动态规划问题——将相邻数...

力扣1221:一次扫描解决分割平衡字符串 时间O(n)空间O(1)

力扣1221:一次扫描解决分割平衡字符串 时间O(n)空间O(1)

题目重解给定一个仅包含'L'和'R'的字符串,要求将其分割成尽可能多的子串,且每个子串中'L'和'R'的数量相等。例如输入"R...

力扣1137题:动态规划解泰波那契数 高效求解第N项的秘密

力扣1137题:动态规划解泰波那契数 高效求解第N项的秘密

一:重新解读题目泰波那契数列是一个充满数学趣味的递推序列:从第3项开始,每个数均为前三个数的和(即Tₙ₊₃ = Tₙ + Tₙ₊₁ + Tₙ₊₂)。当给定整数n时,需要高效计算出第n项的值。面对此类递...

力扣第654题:最大二叉树解题教程 用数组构造最大二叉树

力扣第654题:最大二叉树解题教程 用数组构造最大二叉树

题目解读给定一个不含重复元素的整数数组,我们需要构建一棵最大二叉树。构建规则是:数组中的最大值作为根节点,其左侧子数组构建左子树,右侧子数组构建右子树,然后递归地应用这个规则。这种构建方式体现了分治思...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。