BM64. 最小花费爬楼梯
描述
给定一个整数数组 ,其中 是从楼梯第个台阶向上爬需要支付的费用,下标从0开始。一旦你支付此费用,即可选择向上爬一个或者两个台阶。示例1
输入:
[2,5,20]
输出:
5
说明:
你将从下标为1的台阶开始,支付5 ,向上爬两个台阶,到达楼梯顶部。总花费为5示例2
输入:
[1,100,1,1,1,90,1,1,80,1]
输出:
6
说明:
你将从下标为 0 的台阶开始。 1.支付 1 ,向上爬两个台阶,到达下标为 2 的台阶。 2.支付 1 ,向上爬两个台阶,到达下标为 4 的台阶。 3.支付 1 ,向上爬两个台阶,到达下标为 6 的台阶。 4.支付 1 ,向上爬一个台阶,到达下标为 7 的台阶。 5.支付 1 ,向上爬两个台阶,到达下标为 9 的台阶。 6.支付 1 ,向上爬一个台阶,到达楼梯顶部。 总花费为 6 。Rust 解法, 执行用时: 11ms, 内存消耗: 2816KB, 提交时间: 2022-07-01
struct Solution{ } impl Solution { fn new() -> Self { Solution{} } /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param cost int整型一维数组 * @return int整型 */ pub fn minCostClimbingStairs(&self, cost: Vec<i32>) -> i32 { // write code here let n = cost.len(); // let mut dp = vec![0; n + 1]; let (mut ret, mut po, mut pt) = (0, 0, 0); for i in 2..n { ret = self.min(po + cost[i - 1], pt + cost[i - 2]); pt = po; po = ret; } ret = self.min(po + cost[n - 1], pt + cost[n - 2]); ret } fn min(&self, a: i32, b: i32) -> i32 { if a > b { return b } a } }
C++ 解法, 执行用时: 11ms, 内存消耗: 3072KB, 提交时间: 2022-07-18
static const auto io_sync_off = [](){ std::ios::sync_with_stdio(false); std::cout.tie(nullptr); std::cin.tie(nullptr); return nullptr; }(); class Solution { public: int minCostClimbingStairs(vector<int>& cost) { vector<int>dp(cost.size()); dp[0]=cost[0]; dp[1]=cost[1]; 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]); } };
C++ 解法, 执行用时: 11ms, 内存消耗: 3076KB, 提交时间: 2022-08-06
static const auto io_sync_off = [](){ std::ios::sync_with_stdio(false); std::cout.tie(nullptr); std::cin.tie(nullptr); return nullptr; }(); class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param cost int整型vector * @return int整型 */ int minCostClimbingStairs(vector<int>& cost) { int a[100010]; a[0]=cost[0]; a[1]=cost[1]; int i; for(i=2;i<cost.size();i++){ a[i]=min(a[i-1],a[i-2])+cost[i]; } return min(a[i-1],a[i-2]); } };
C++ 解法, 执行用时: 11ms, 内存消耗: 3616KB, 提交时间: 2022-07-24
static const auto io_sync_off = [](){ std::ios::sync_with_stdio(false); std::cout.tie(nullptr); std::cin.tie(nullptr); return nullptr; }(); class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param cost int整型vector * @return int整型 */ int minCostClimbingStairs(vector<int>& cost) { // write code here int n = cost.size(); if (n == 1) return cost[0]; if (n == 2) return min(cost[0], cost[1]); vector<int> dp(n); dp[0] = cost[0]; dp[1] = cost[1]; for (int i = 2; i < n; ++i) { dp[i] = cost[i] + min(dp[i - 1], dp[i - 2]); } return min(dp[n - 1], dp[n - 2]); } };
C++ 解法, 执行用时: 12ms, 内存消耗: 3076KB, 提交时间: 2022-07-30
const auto io_sync_off=[]() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); std::cout.tie(nullptr); return nullptr; }(); class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param cost int整型vector * @return int整型 */ int minCostClimbingStairs(vector<int>& cost) { // write code here for (int i = cost.size() - 3; i >= 0; i--) cost[i] += min(cost[i + 1], cost[i + 2]); return min(cost[0], cost[1]); } };