刷题系列博客链接:机试题目

目录

题目及示例

我的题解


题目及示例

数组的每个索引作为一个阶梯,第 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。
注意:

cost 的长度将会在 [2, 1000]。
每一个 cost[i] 将会是一个Integer类型,范围为 [0, 999]。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/min-cost-climbing-stairs
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

我的题解

一道最简单的动态规划题,我决定以这道题作为我学习动态规划的开始!

方法一:动态规划
假设数组 cost 的长度为 n,则 n 个阶梯分别对应下标 0 到 n−1,楼层顶部对应下标 n,问题等价于计算达到下标 n 的最小花费。可以通过动态规划求解。

创建长度为 n+1 的数组dp,其中 dp[i] 表示达到下标 i 的最小花费。

由于可以选择下标 0 或 1 作为初始阶梯,因此有 dp[0]=dp[1]=0。

当 2≤i≤n 时,可以从下标 i−1 使用 cost[i−1] 的花费达到下标 i,或者从下标 i−2 使用 cost[i−2] 的花费达到下标 i。为了使总花费最小,dp[i] 应取上述两项的最小值,因此状态转移方程如下:
dp[i]=min(dp[i−1]+cost[i−1],dp[i−2]+cost[i−2])

依次计算 dp 中的每一项的值,最终得到的 dp[n] 即为达到楼层顶部的最小花费。

作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/min-cost-climbing-stairs/solution/shi-yong-zui-xiao-hua-fei-pa-lou-ti-by-l-ncf8/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

// 官方C语言题解
int minCostClimbingStairs(int* cost, int costSize) {int dp[costSize + 1];dp[0] = dp[1] = 0;for (int i = 2; i <= costSize; i++) {dp[i] = fmin(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2]);}return dp[costSize];
}

上述代码的时间复杂度和空间复杂度都是 O(n)。注意到当 i≥2 时,dp[i] 只和 dp[i−1] 与 dp[i−2] 有关,因此可以使用滚动数组的思想,将空间复杂度优化到 O(1)。

作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/min-cost-climbing-stairs/solution/shi-yong-zui-xiao-hua-fei-pa-lou-ti-by-l-ncf8/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

// 官方C语言题解 优化版
int minCostClimbingStairs(int* cost, int costSize) {int prev = 0, curr = 0;for (int i = 2; i <= costSize; i++) {int next = fmin(curr + cost[i - 1], prev + cost[i - 2]);prev = curr;curr = next;}return curr;
}

力扣题目系列:746. 使用最小花费爬楼梯 -- 一道动态规划入门题相关推荐

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

    746. 使用最小花费爬楼梯 746. 使用最小花费爬楼梯 数组的每个索引做为一个阶梯,第 i个阶梯对应着一个非负数的体力花费值 costi. 每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以 ...

  2. leetcode系列-746.使用最小花费爬楼梯

    题目描述:给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用. 一旦你支付此费用,即可选择向上爬一个或者两个台阶.你可以选择从下标为 0 或下标为 1 的台 ...

  3. D38| DP理论基础 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯

    DP理论基础 重要知识点: 1.动规和贪心的区别:动规是由前一个状态推导出来的,而贪心是局部直接选最优的 2.动规五部曲: 1)确定dp数组(dp table)以及下标的含义 2)确定递推公式 3)d ...

  4. 力扣算法 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯

    学习内容 力扣算法 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯 具体内容 509. 斐波那契数 斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 .该数列由 0 ...

  5. leetcode - 746. 使用最小花费爬楼梯

    746. 使用最小花费爬楼梯 -------------------------------------- 数组的每个索引做为一个阶梯,第 i个阶梯对应着一个非负数的体力花费值 cost[i] (索引 ...

  6. LeetCode Algorithm 746. 使用最小花费爬楼梯

    746. 使用最小花费爬楼梯 Ideas 首先确定题目类型,爬楼梯问题,并且给定了状态转移的限制,其实就已经可以确定状态转移方程了. 然后题目说可以从下标为0或下标为1的台阶开始爬,所以我们可以定义两 ...

  7. 代码随想录算法训练营第三十八天 | 509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯。

    Leetcode 509. 斐波那契数 题目链接:509. 斐波那契数 class Solution {public:int fib(int n) {if(n <= 1)return n;int ...

  8. LeetCode-动态规划基础题-746. 使用最小花费爬楼梯

    描述 746.使用最小花费爬楼梯 数组的每个下标作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值 cost[i](下标从 0 开始). 每当你爬上一个阶梯你都要花费对应的体力值,一旦支付了相应 ...

  9. [每日一题]746. 使用最小花费爬楼梯

    [每日一题]746. 使用最小花费爬楼梯 数组的每个索引作为一个阶梯,第 i个阶梯对应着一个非负数的体力花费值 costi. 每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以选择继续爬一个阶梯 ...

  10. Java实现 LeetCode 746 使用最小花费爬楼梯(递推)

    746. 使用最小花费爬楼梯 数组的每个索引做为一个阶梯,第 i个阶梯对应着一个非负数的体力花费值 costi. 每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以选择继续爬一个阶梯或者爬两个阶 ...

最新文章

  1. python计算四元素组合算法_python – 算法,列表元素之间的最近点
  2. win10默认账户 WDAGUtilityAccount 和 DefaultAccount
  3. Ethernet/IP 学习笔记四
  4. Spring-mybatis 抽取 baseDao。
  5. VMware vSAN紧盯虚拟化应用
  6. android usb触摸屏驱动 win10,Win10手机居然这样兼容安卓:直接运行apk!
  7. 中南大学12月13日考c语言,中南大学2010级C语言试卷
  8. golang和C的输出格式化对齐
  9. php简单验证码实例,php结合GD库简单实现验证码的示例代码
  10. python发音模块-python声音模块
  11. spring boot first
  12. 对于传统scnece-classfication的分析
  13. 电路串联和并联图解_迷惑我们很久的串联/并联谐振电路(多图、详解)
  14. Ubuntu操作系统是什么?它和windows有什么区别呢?
  15. 视频教程-项目实战:支持以太坊的MySQL管理系统视频课程-区块链
  16. php体育网站模板,运动健身企业的网站模板
  17. ios 新浪微博网页登陆分享 {error:userinfoerror pos:5}
  18. 2021年茶艺师(中级)考试总结及茶艺师(中级)复审模拟考试
  19. HTML+CSS+JavaScript知识点总结
  20. iOS不得姐项目--pop框架的初次使用

热门文章

  1. Encryption and decryption、Steganography、Decryption Tools
  2. 机器学习系统设计(一)--入门之环境搭建
  3. Android5.0特性阴影效果和裁剪
  4. 数据结构(三)树、二叉树、最优二叉树
  5. 20130331java语言基础学习笔记-语句_breakcontinue
  6. MFC(VS2010)编程实例之一(Edit Control控件)
  7. 【Tensorflow】下载预训练模型和参数小结
  8. 【ENVI入门系列】13.分类后处理
  9. International Journal of Rock Mechanics and Mining Sciences (Vol 124-12月期最新研究译文)
  10. Spring-01-IOC控制反转/DI依赖注入