【算法与数据结构】746、LeetCode使用最小花费爬楼梯

文章目录

所有的LeetCode题解索引,可以看这篇文章------【算法和数据结构】LeetCode题解

一、题目

二、解法

思路分析:本题可以从0阶或者1阶台阶开始,每次爬楼梯所需的花费是之前的花费dp[i]+从本层向上爬所需的cost[i] d p [ i ] + c o s t [ i ] dp[i]+cost[i] dp[i]+cost[i]。可能到达第i阶台阶的情况有两种:从第i-2阶台阶一次性爬两步;从第i-1阶台阶一次性爬一步。因为要找到最小的花费,可以知道动态数组的表达式为: d p [ i ] = m i n ( d p [ i − 2 ] + c o s t [ i − 2 ] , d p [ i − 1 ] + c o s t [ i − 1 ] ) dp[i] = min(dp[i-2]+cost[i-2],dp[i-1]+cost[i-1]) dp[i]=min(dp[i−2]+cost[i−2],dp[i−1]+cost[i−1])。

程序如下:

cpp 复制代码
class Solution {
public:
	int minCostClimbingStairs(vector<int>& cost) {
		vector<int> dp(cost.size() + 1);	// 楼顶
		dp[0] = 0;
		dp[1] = 0;
		for (int i = 2; i <= cost.size(); i++) {
			dp[i] = min(dp[i-1] + cost[i-1], dp[i-2] + cost[i-2]);
		}
		return dp[cost.size()];
	}
};

复杂度分析:

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

三、完整代码

cpp 复制代码
# include <iostream>
# include <vector>
# include <algorithm>
using namespace std;

class Solution {
public:
	int minCostClimbingStairs(vector<int>& cost) {
		vector<int> dp(cost.size() + 1);	// 楼顶
		dp[0] = 0;
		dp[1] = 0;
		for (int i = 2; i <= cost.size(); i++) {
			dp[i] = min(dp[i-1] + cost[i-1], dp[i-2] + cost[i-2]);
		}
		return dp[cost.size()];
	}
};

int main() {
	vector<int> cost = { 1, 100, 1, 1, 1, 100, 1, 1, 100, 1 };
	Solution s1;
	int result = s1.minCostClimbingStairs(cost);
	cout << result << endl;
	system("pause");
	return 0;
}

end

相关推荐
CHANG_THE_WORLD5 分钟前
金字塔降低采样
算法·金字塔采样
不知天地为何吴女士2 小时前
Day32| 509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯
算法
小坏坏的大世界2 小时前
C++ STL常用容器总结(vector, deque, list, map, set)
c++·算法
励志要当大牛的小白菜5 小时前
ART配对软件使用
开发语言·c++·qt·算法
qq_513970445 小时前
力扣 hot100 Day56
算法·leetcode
PAK向日葵6 小时前
【算法导论】如何攻克一道Hard难度的LeetCode题?以「寻找两个正序数组的中位数」为例
c++·算法·面试
爱喝矿泉水的猛男8 小时前
非定长滑动窗口(持续更新)
算法·leetcode·职场和发展
YuTaoShao8 小时前
【LeetCode 热题 100】131. 分割回文串——回溯
java·算法·leetcode·深度优先
YouQian7728 小时前
Traffic Lights set的使用
算法
go546315846510 小时前
基于深度学习的食管癌右喉返神经旁淋巴结预测系统研究
图像处理·人工智能·深度学习·神经网络·算法