当前位置:网站首页>LeetCode使用最小花费爬楼梯----dp问题
LeetCode使用最小花费爬楼梯----dp问题
2022-08-05 02:10:00 【零雨z】
题目:给你一个整数数组cost,其中cost[i]是从楼梯第个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬—个或者两个台阶。
你可以选择从下标为0或下标为1的台阶开始爬楼梯。请你计算并返回达到楼梯顶部的最低花费。
示例如下:

这道题和青蛙爬楼梯差不多,可以参考下dp问题的常用思路步骤
动态规划问题三步走:
第一步骤:定义数组元素的含义
第二步骤:找出数组元素之间的关系式
第三步骤:找出初始值
用画图写的大概思路,带举例
dp[i]表示到达i的最小花费
cost[i]表示从第i个楼梯上爬需要的费用
i-1楼梯,花费cost[i-1]可以到达下标i
当2<isn时(因为一次可以选择走1阶或者2阶),可以从下标i-1使用cost[i一1]的花费达到下标i,或者从下标i-2使用costi-2]的花费达到下标i。为了使总花费最小,dp[i]应取上述两项的最小值。

举例:i等于2时,到
达2有两种办法
下标O走两阶或者下标1走一阶
dpli]表示你到第0阶或者第1阶的最小花费,因为这两个台阶是初始台阶,可以选择,所以dp[1/0]都为O,只需要考虑cost[0]和cost[1]谁大cost[0]和cost[1]都可以通过支付费用到达第二阶台阶上写的数字是设置的费用,那么就是0+2和O+1取最小得知dp2=1
同理i=3的时候可以通过第一阶徒2或者第二阶走1也就是0+1和1+3取最小值得知dp3 = 1
直到到达顶端即dp数组的终点返回dp终点即可。
代码如下:
class Solution {
public int minCostClimbingStairs(int[] cost) {
int n = cost.length;
int[] dp = new int[n + 1];
dp[0] = dp[1] = 0;
for (int i = 2; i <= n; i++) {
dp[i] = Math.min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2]);
}
return dp[n];
}
}这道题通过分析还可以发现,每个元素只和上个元素和上上个元素有关,可以思考是否符合滚动数组。
class Solution {
public:
int minCostClimbingStairs(vector<int>& cost) {
int n = cost.size();
int prev = 0, curr = 0;//初始化
for (int i = 2; i <= n; i++) {
int next = min(curr + cost[i - 1], prev + cost[i - 2]);
prev = curr;//滚动
curr = next;//滚动
}
return curr;
}
};边栏推荐
- 【存储】曙光存储DS800-G35 ISCSI各映射LUN给服务器
- Domain Driven Design - MDD
- MySQL学习
- Log an error encountered when compiling google gn "I could not find a ".gn" file ..."
- How do programmers without objects spend the Chinese Valentine's Day
- Greenplum Database Fault Analysis - Why Does gpstart -a Return Failure After Version Upgrade?
- Intel XDC 2022 Wonderful Review: Build an Open Ecosystem and Unleash the Potential of "Infrastructure"
- MySQL3
- "Configuration" is a double-edged sword, it will take you to understand various configuration methods
- 海量服务实例动态化管理
猜你喜欢

Live preview | 30 minutes started quickly!Look at credible distributed AI chain oar architectural design

Three handshake and four wave in tcp

Live playback including PPT download | Build Online Deep Learning based on Flink & DeepRec

直播预告|30分钟快速入门!来看可信分布式AI链桨的架构设计

《.NET物联网从零开始》系列

js中try...catch和finally的用法

编译预处理等细节

如何发现一个有价值的 GameFi?
![[Unity Entry Plan] Handling of Occlusion Problems in 2D Games & Pseudo Perspective](/img/de/944b31c68cc5b9ffa6a585530e7be9.png)
[Unity Entry Plan] Handling of Occlusion Problems in 2D Games & Pseudo Perspective

蚁剑高级模块开发
随机推荐
C学生管理系统 头添加学生节点
Method Overriding and Object Class
Programmer's list of sheep counting when insomnia | Daily anecdote
hypervisor相关的知识点
MySQL3
Oracle encapsulates restful interfaces into views
重新审视分布式系统:永远不会有完美的一致性方案……
ExcelPatternTool: Excel table-database mutual import tool
多线程(2)
LPQ(局部相位量化)学习笔记
.Net C# Console Create a window using Win32 API
用@Mapper查询oracle的分区情况报错
IJCAI2022 | DictBert:采用对比学习的字典描述知识增强的预训练语言模型
Exploding the circle of friends, Alibaba produced billion-level concurrent design quick notes are too fragrant
iNFTnews | What can NFTs bring to the sports industry and fans?
KingbaseES V8 GIS data migration solution (2. Introduction to the capabilities of Kingbase GIS)
亚马逊云科技携手中科创达为行业客户构建AIoT平台
【C语言】详解栈和队列(定义、销毁、数据的操作)
如何创建rpm包
Live preview | 30 minutes started quickly!Look at credible distributed AI chain oar architectural design