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

文章目录

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

一、题目

二、解法

  思路分析:本题可以从0阶或者1阶台阶开始,每次爬楼梯所需的花费是之前的花费dpi+从本层向上爬所需的costi d p i + c o s t i dpi+costi dpi+costi。可能到达第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 ) dpi = min(dpi-2+costi-2,dpi-1+costi-1) dpi=min(dpi−2+costi−2,dpi−1+costi−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

相关推荐
Shan12055 分钟前
经典算法题示例与详解:飞地的数量(二)
java·数据结构·算法
土司大王34 分钟前
LeetCode hot100——全排列
java·算法·leetcode
尾善爱看海38 分钟前
前端面试算法手撕全解(高频真题+标准答案)
算法·js
203号居民1 小时前
LeetCode hot 100 — 138. 随机链表的复制
算法·leetcode·链表
凌晨1681 小时前
OpenCV(十一)人脸识别三大算法LBPH、EigenFace、FisherFace
人工智能·opencv·算法
明月_清风1 小时前
分治、贪心、回溯、动态规划:四种经典算法思想
后端·算法
Thomas21432 小时前
spark sort shuffer 和 hash shuffer 图解对比
算法·哈希算法
AbandonForce2 小时前
简谈线程池
开发语言·c++·算法
智购科技智能售货柜2 小时前
2026自动售货机商品掉落声学计数方案:从麦克风到频谱识别的工程实践~YH
人工智能·算法
土司大王2 小时前
LeetCode hot100——实现 Trie (前缀树)
java·算法·leetcode