描述

746.使用最小花费爬楼梯
数组的每个下标作为一个阶梯,第 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] 将会是一个整型数据,范围为 [0, 999] 。

思路:动态规划

   //1.确定dp[i]数组与下标的含义:达到第i个台阶所花费的最少体力//2.确定递推公式:有两个途径得到dp[i];首先选取上一步dp[i-1]跟dp[i-2]中最小的,//  然后加上当前台阶的花费dp[i] = min(dp[i-1], dp[i-2]) + cost[i];//3.dp数组初始化:dp[0]是第0个台阶,dp[1]是第1个台阶//4.确定遍历顺序//5.举例推导dp数组

时间复杂度:O(n)
空间复杂度:O(n)

class Solution {public:int minCostClimbingStairs(vector<int>& cost) {//1.确定dp[i]数组与下标的含义:达到第i个台阶所花费的最少体力//2.确定递推公式//3.dp数组初始化//4.确定遍历顺序//5.举例推导dp数组vector<int> dp(cost.size());   //初始化dp数组大小dp[0] = cost[0];               //确定初始条件,到达第0个台阶最少花费在第0个costdp[1] = cost[1];               //到达第1个台阶最少花费在第1个的costfor(int i=2;i<cost.size();i++){dp[i] = min(dp[i-1], dp[i-2]) + cost[i];}//由于最后一步可以不用花费所以取return min(dp[cost.size()-1],dp[cost.size()-2]);}
};

优化动态规划

时间复杂度:O(n)
空间复杂度:O(1)

class Solution {public:int minCostClimbingStairs(vector<int>& cost) {//1.确定dp[i]数组与下标的含义:达到第i个台阶所花费的最少体力//2.确定递推公式:有两个途径得到dp[i];首先选取上一步dp[i-1]跟dp[i-2]中最小的,//  然后加上当前台阶的花费dp[i] = min(dp[i-1], dp[i-2]) + cost[i];//3.dp数组初始化:dp[0]是第0个台阶,dp[1]是第1个台阶//4.确定遍历顺序//5.举例推导dp数组// vector<int> dp(cost.size());   //初始化dp数组大小// dp[0] = cost[0];               //确定初始条件,到达第0个台阶最少花费在第0个cost// dp[1] = cost[1];               //到达第1个台阶最少花费在第1个的cost// for(int i=2;i<cost.size();i++){//     dp[i] = min(dp[i-1], dp[i-2]) + cost[i];// }// //由于最后一步可以不用花费所以取// return min(dp[cost.size()-1],dp[cost.size()-2]);vector<int> dp(2);dp[0] = cost[0];dp[1] = cost[1];for(int i=2;i<cost.size();i++){int sum = min(dp[0], dp[1]) + cost[i];dp[0] = dp[1];dp[1] = sum;}return min(dp[0], dp[1]);}
};

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. 746.使用最小花费爬楼梯

    使用最小花费爬楼梯 方法一: class Solution {public int minCostClimbingStairs(int[] cost) {if (cost == null || cos ...

最新文章

  1. Mysql高级调优篇——前言简介
  2. c语言获取当前日期和时间
  3. 人工智能中的局部搜索算法
  4. Spring Boot 单元测试详解+实战教程
  5. java split空字符_java split函数结尾空字符串被丢弃的问题
  6. 信息学奥赛一本通(1307:【例1.3】高精度乘法)
  7. 【存档】20个正则表达式
  8. 群体智能算法之蝙蝠算法
  9. 莱斯康混响插件合集 – Lexicon Plugin Bundle macOS
  10. 计算机桌面设置上时间表,怎么在电脑上安排每天的工作计划?你需要添加一款提醒功能强大的桌面便签软件...
  11. 为什么博途V17及以下的HMI面板不能与1500固件版本2.9或1200版本4.5 的CPU建立连接?
  12. linux代码丢了,Linux 使用ss命令代替 netstat
  13. 用python进行数据分析(一:数据理解)
  14. [Excel]vlookup的内在逻辑以及模糊检索
  15. 让设计师哭笑不得的文案
  16. 使用XML表达表格数据
  17. ggplot2读书笔记9:第六章 标度(二)
  18. 配置高可用(名称节点高可用)
  19. 【信息技术学考】2021年深圳市高中学业水平考试卷(解析版)
  20. 《硬件接入》3288板刷机及屏幕参数配置探索

热门文章

  1. SVN版本控制如何删除文件或者文件夹?
  2. PAT甲级1127 ZigZagging on a Tree (30分):[C++题解]之字形层次遍历树bfs实现一层一层读入
  3. mysql oracle sql区别吗_mysql数据库的SQL语句和oracle的有什么区别?详细点
  4. excel 树结构json_写一个上传excel表格,解析成 json 的接口
  5. mysql crash_Mysql 无故crash
  6. bootstrap 点击加号 表格_bootstrap中的输入组按钮,点击加号加1,减1子
  7. DualCircleList
  8. xa 全局锁_fescar锁设计和隔离级别的理解
  9. python常用操作符_Python--3常用操作符
  10. 扣押游戏android,恐怖探索游戏「扣押(DISTRAINT)」