当前位置: 首页 > news >正文

动态规划 Leetcode 746 使用最小花费爬楼梯

使用最小花费爬楼梯

Leetcode 746

学习记录自代码随想录

给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。
你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。
请你计算并返回达到楼梯顶部的最低花费。

示例 1:
输入:cost = [10,15,20]
输出:15
解释:你将从下标为 1 的台阶开始。

  • 支付 15 ,向上爬两个台阶,到达楼梯顶部。
    总花费为 15 。

示例 2:
输入:cost = [1,100,1,1,1,100,1,1,100,1]
输出:6
解释:你将从下标为 0 的台阶开始。

  • 支付 1 ,向上爬两个台阶,到达下标为 2 的台阶。
  • 支付 1 ,向上爬两个台阶,到达下标为 4 的台阶。
  • 支付 1 ,向上爬两个台阶,到达下标为 6 的台阶。
  • 支付 1 ,向上爬一个台阶,到达下标为 7 的台阶。
  • 支付 1 ,向上爬两个台阶,到达下标为 9 的台阶。
  • 支付 1 ,向上爬一个台阶,到达楼梯顶部。
    总花费为 6 。

提示:
2 <= cost.length <= 1000
0 <= cost[i] <= 999

要点:1.需要想出递推公式: d p [ i ] = m i n ( d p [ i − 1 ] + c o s t [ i − 1 ] , d p [ i − 2 ] + c o s t [ i − 2 ] ) dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]) dp[i]=min(dp[i1]+cost[i1],dp[i2]+cost[i2])

方法一:dp数组用vector表示

class Solution {
public:int minCostClimbingStairs(vector<int>& cost) {if(cost.size() <= 2) return min(cost[0], cost[1]);int n = cost.size();// 1.dp数组含义,爬到第i个台阶所需支付的费用(此处并不算第i阶台阶的花费),爬到顶层是总台阶数加1vector<int> dp(n+1);// 2.递推公式 dp[i] = min(dp[i-1]+cost[i-1], dp[i-2]+cost[i-2]);// 3.初始化dp[0] = 0;dp[1] = 0;// 4.遍历顺序,从前向后for(int i = 2; i < n+1; i++){dp[i] = min(dp[i-1] + cost[i-1], dp[i-2] + cost[i-2]);}// 5.举例推导 eg.对[10,15,20]得dp数组为0,0,10,15,返回末尾15return dp[n];}
};

方法二:简化dp数组标志,用两个变量迭代变化,减少空间复杂度

class Solution {
public:int minCostClimbingStairs(vector<int>& cost) {if(cost.size() <= 2) return min(cost[0], cost[1]);int n = cost.size();// 1.dp数组含义,爬到第i个台阶所需支付的费用(此处并不算第i阶台阶的花费),爬到顶层是总台阶数加1// vector<int> dp(n+1);// 2.递推公式 dp[i] = min(dp[i-1]+cost[i-1], dp[i-2]+cost[i-2]);// 3.初始化int dp_1 = 0;int dp_2 = 0;// 4.遍历顺序,从前向后for(int i = 2; i < n+1; i++){int dp_temp = min(dp_1 + cost[i-1], dp_2 + cost[i-2]);dp_2 = dp_1;dp_1 = dp_temp;}// 5.举例推导 eg.对[10,15,20]得dp数组为0,0,10,15,返回末尾15return dp_1;}
};

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • SSD LDPC软错误探测方案解读
  • C语言分析基础排序算法——交换排序
  • 仓库管理中三防手持终端应用的小知识!
  • ElasticSearch为什么快?
  • Linux:kubernetes(k8s)探针LivenessProbe的使用(9)
  • JavaEE进阶(14)Linux基本使用和程序部署(博客系统部署)
  • 【解决】虚幻导入FBX模型不是一个整体
  • java上传本地文件到服务器共享
  • LeetCode_25_困难_K个一组翻转链表
  • 开源计算机视觉库OpenCV详解
  • 《自私的基因》读书笔记
  • 初级代码游戏的专栏介绍与文章目录
  • 代码随想录算法训练营day53|第九章 动态规划part14
  • 关于springboot一个接口请求后,主动取消后,后端是否还在跑
  • SQLite3中的callback回调函数注意的细节
  • Google 是如何开发 Web 框架的
  • 【附node操作实例】redis简明入门系列—字符串类型
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • Akka系列(七):Actor持久化之Akka persistence
  • IDEA 插件开发入门教程
  • Java 最常见的 200+ 面试题:面试必备
  • log4j2输出到kafka
  • oschina
  • React系列之 Redux 架构模式
  • Spring Cloud中负载均衡器概览
  • Terraform入门 - 1. 安装Terraform
  • TypeScript迭代器
  • Yii源码解读-服务定位器(Service Locator)
  • zookeeper系列(七)实战分布式命名服务
  • 初识 beanstalkd
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 构建二叉树进行数值数组的去重及优化
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 优秀架构师必须掌握的架构思维
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • # Redis 入门到精通(八)-- 服务器配置-redis.conf配置与高级数据类型
  • #php的pecl工具#
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • (03)光刻——半导体电路的绘制
  • (2)nginx 安装、启停
  • (2024,Flag-DiT,文本引导的多模态生成,SR,统一的标记化,RoPE、RMSNorm 和流匹配)Lumina-T2X
  • (day6) 319. 灯泡开关
  • (ros//EnvironmentVariables)ros环境变量
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (附源码)ssm高校实验室 毕业设计 800008
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (计算机网络)物理层
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (一)Docker基本介绍
  • (转)memcache、redis缓存
  • .mp4格式的视频为何不能通过video标签在chrome浏览器中播放?
  • .NET 反射的使用
  • .net6 当连接用户的shell断掉后,dotnet会自动关闭,达不到长期运行的效果。.NET 进程守护
  • .NET开源快速、强大、免费的电子表格组件