LeetCode-动态规划基础题-746. 使用最小花费爬楼梯
描述
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. 使用最小花费爬楼梯相关推荐
- [每日一题]746. 使用最小花费爬楼梯
[每日一题]746. 使用最小花费爬楼梯 数组的每个索引作为一个阶梯,第 i个阶梯对应着一个非负数的体力花费值 costi. 每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以选择继续爬一个阶梯 ...
- leetcode - 746. 使用最小花费爬楼梯
746. 使用最小花费爬楼梯 -------------------------------------- 数组的每个索引做为一个阶梯,第 i个阶梯对应着一个非负数的体力花费值 cost[i] (索引 ...
- LeetCode Algorithm 746. 使用最小花费爬楼梯
746. 使用最小花费爬楼梯 Ideas 首先确定题目类型,爬楼梯问题,并且给定了状态转移的限制,其实就已经可以确定状态转移方程了. 然后题目说可以从下标为0或下标为1的台阶开始爬,所以我们可以定义两 ...
- 746. 使用最小花费爬楼梯 golang 动态规划
746. 使用最小花费爬楼梯 746. 使用最小花费爬楼梯 数组的每个索引做为一个阶梯,第 i个阶梯对应着一个非负数的体力花费值 costi. 每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以 ...
- Java实现 LeetCode 746 使用最小花费爬楼梯(递推)
746. 使用最小花费爬楼梯 数组的每个索引做为一个阶梯,第 i个阶梯对应着一个非负数的体力花费值 costi. 每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以选择继续爬一个阶梯或者爬两个阶 ...
- 代码随想录算法训练营第三十八天 | 509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯。
Leetcode 509. 斐波那契数 题目链接:509. 斐波那契数 class Solution {public:int fib(int n) {if(n <= 1)return n;int ...
- 力扣算法 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯
学习内容 力扣算法 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯 具体内容 509. 斐波那契数 斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 .该数列由 0 ...
- D38| DP理论基础 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯
DP理论基础 重要知识点: 1.动规和贪心的区别:动规是由前一个状态推导出来的,而贪心是局部直接选最优的 2.动规五部曲: 1)确定dp数组(dp table)以及下标的含义 2)确定递推公式 3)d ...
- 746.使用最小花费爬楼梯
使用最小花费爬楼梯 方法一: class Solution {public int minCostClimbingStairs(int[] cost) {if (cost == null || cos ...
最新文章
- Mysql高级调优篇——前言简介
- c语言获取当前日期和时间
- 人工智能中的局部搜索算法
- Spring Boot 单元测试详解+实战教程
- java split空字符_java split函数结尾空字符串被丢弃的问题
- 信息学奥赛一本通(1307:【例1.3】高精度乘法)
- 【存档】20个正则表达式
- 群体智能算法之蝙蝠算法
- 莱斯康混响插件合集 – Lexicon Plugin Bundle macOS
- 计算机桌面设置上时间表,怎么在电脑上安排每天的工作计划?你需要添加一款提醒功能强大的桌面便签软件...
- 为什么博途V17及以下的HMI面板不能与1500固件版本2.9或1200版本4.5 的CPU建立连接?
- linux代码丢了,Linux 使用ss命令代替 netstat
- 用python进行数据分析(一:数据理解)
- [Excel]vlookup的内在逻辑以及模糊检索
- 让设计师哭笑不得的文案
- 使用XML表达表格数据
- ggplot2读书笔记9:第六章 标度(二)
- 配置高可用(名称节点高可用)
- 【信息技术学考】2021年深圳市高中学业水平考试卷(解析版)
- 《硬件接入》3288板刷机及屏幕参数配置探索
热门文章
- SVN版本控制如何删除文件或者文件夹?
- PAT甲级1127 ZigZagging on a Tree (30分):[C++题解]之字形层次遍历树bfs实现一层一层读入
- mysql oracle sql区别吗_mysql数据库的SQL语句和oracle的有什么区别?详细点
- excel 树结构json_写一个上传excel表格,解析成 json 的接口
- mysql crash_Mysql 无故crash
- bootstrap 点击加号 表格_bootstrap中的输入组按钮,点击加号加1,减1子
- DualCircleList
- xa 全局锁_fescar锁设计和隔离级别的理解
- python常用操作符_Python--3常用操作符
- 扣押游戏android,恐怖探索游戏「扣押(DISTRAINT)」