python/c++ Leetcode题解——746. 使用最小花费爬楼梯

目录

方法一:动态规划

复杂度分析


方法一:动态规划

假设数组 cost 的长度为 n,则 n 个阶梯分别对应下标 0 到 n−1,楼层顶部对应下标 n,问题等价于计算达到下标 n 的最小花费。可以通过动态规划求解。

创建长度为 n+1 的数组 dp,其中 dp[i] 表示达到下标 i 的最小花费。

由于可以选择下标 0 或 1 作为初始阶梯,因此有 dp[0] = dp[1] = 0.

当 2 ≤ i ≤ $n ^ 2$ 时,可以从下标 i−1i-1i−1 使用 cost[i−1] 的花费达到下标 iii,或者从下标 i−2i-2i−2 使用 cost[i−2] 的花费达到下标 i。为了使总花费最小,dp[i] 应取上述两项的最小值,因此状态转移方程如下:
        dp[i]=min(dp[i−1]+cost[i−1],dp[i−2]+cost[i−2])
依次计算 dp 中的每一项的值,最终得到的 dp[n] 即为达到楼层顶部的最小花费。

C++: 

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

python:

class Solution:def minCostClimbingStairs(self, cost: List[int]) -> int:n = len(cost)dp = [0] * (n + 1)for i in range(2, n + 1):dp[i] = min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2])return dp[n]


上述代码的时间复杂度和空间复杂度都是 O(n)。注意到当 i≥2 时,dp[i] 只和 dp[i−1] 与 dp[i−2] 有关,因此可以使用滚动数组的思想,将空间复杂度优化到 O(1)。

C++:

class Solution {public int minCostClimbingStairs(int[] cost) {int n = cost.length;int prev = 0, curr = 0;for (int i = 2; i <= n; i++) {int next = Math.min(curr + cost[i - 1], prev + cost[i - 2]);prev = curr;curr = next;}return curr;}
}

python:

class Solution:def minCostClimbingStairs(self, cost: List[int]) -> int:n = len(cost)prev = curr = 0for i in range(2, n + 1):nxt = min(curr + cost[i - 1], prev + cost[i - 2])prev, curr = curr, nxtreturn curr


复杂度分析

时间复杂度:O(n),其中 n 是数组 costt 的长度。需要依次计算每个 dp 值,每个值的计算需要常数时间,因此总时间复杂度是 O(n)。

空间复杂度:O(1)。使用滚动数组的思想,只需要使用有限的额外空间

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/228151.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot 学习网站

Spring Boot 系列教程https://www.docs4dev.com/ Spring Boot 教程汇总 http://www.springboot.wiki/ Spring Cloud 微服务教程 http://www.springboot.wiki/ 1、自定义banner   https://www.cnblogs.com/cc11001100/p/7456145.html 2、事件和监听器   https://blog.csd…

孩子都能学会的FPGA:第三十三课——用FPGA实现一个通用的SPI主机接收模块

&#xff08;原创声明&#xff1a;该文是作者的原创&#xff0c;面向对象是FPGA入门者&#xff0c;后续会有进阶的高级教程。宗旨是让每个想做FPGA的人轻松入门&#xff0c;作者不光让大家知其然&#xff0c;还要让大家知其所以然&#xff01;每个工程作者都搭建了全自动化的仿…

如何从 iPhone 上恢复已删除的照片教程分享

您是否错误地删除了 iPhone 上的错误照片&#xff1f;或者您可能已将手机恢复出厂设置&#xff0c;但现在所有照片都消失了&#xff1f;如果您现在遇到这样的情况&#xff0c;我们可以为您提供解决方案。 在本文中&#xff0c;我们将向您展示七种数据恢复方法&#xff0c;可以…

人工智能驱动化学品创新设计的实践与展望

改进化学品研发模式&#xff0c;缩短化学品从发现到应用的时间是化工行业中所有科学研究者和产业人员的最终目 标。本文提出&#xff1a;化学品设计是一个涉及多组分、多尺度和多物理场的复杂过程&#xff0c;现有的实验研究模式难以深入高 效地揭示相关的物理化学机制&#xf…

STM8L151C8单片机学习例程(9)——Unique-ID

直接点击打不开&#xff0c;右键新建窗口打开链接 STM8L151C8单片机学习例程&#xff08;7&#xff09;——Unique-ID

论文解读 | NeurIPS2023:「解释一切」图像概念解释器

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 讲者简介 孙奥&#xff1a; 香港科技大学软件安全实验室在读博士&#xff0c;研究兴趣为可解释性人工智能和可信机器学习&#xff0c;主要是从Post-hoc&#xff0c;逻辑和概念的角度分析神经网络的机理 Title 「…

服务器安全的威胁和防范

由于服务器发挥着至关重要的作用&#xff0c;因此存储在服务器上的机密数据和信息非常具有价值。做好服务器安全至关重要。 常见的服务器安全隐患包括&#xff1a; 1.恶意的攻击&#xff1a;遭受CC攻击和DDoS攻击&#xff0c;导致游戏或是网站打不开&#xff0c;严重影响业务…

【智能算法】11种混沌映射算法+2种智能算法示范【鲸鱼WOA、灰狼GWO算法】

目录 1 主要内容 2 部分代码 3 程序结果 4 下载链接 1 主要内容 混沌映射算法是我们在智能算法改进中常用到的方法&#xff0c;本程序充分考虑改进算法应用的便捷性&#xff0c;集成了11种混合映射算法&#xff0c;包括Singer、tent、Logistic、Cubic、chebyshev、Piecewise…

学通python

学通python &#xff08;一. 涉及知识点&#xff09; python基础&#xff08;认识python&#xff0c;环境&#xff0c;pycharm&#xff0c;注释&#xff0c;变量&#xff0c;变量类型&#xff0c;输入输出&#xff0c;运算发&#xff09;流程控制结构&#xff08;判断语句&am…

华为面试题,连续出了三年!

写在前面 据说&#xff0c;这是一道被华为 2021、2022 和 2023 都出过的题目 &#x1f923; 华为是「卷」的发明者&#xff0c;但不是「内卷」发明者&#xff0c;毕竟只有华为是实打实的给加班费。 这么卷的公司&#xff0c;怎么也不更新一下题库。 难道没人做出来就不用考虑换…

2023-12-17 AIGC-AnimateDiff详细安装和使用教程

AnimateDiff专用模型下载 AnimateDiff有其自身专门的运动模型mm_sd_v15_v2.ckpt 和 专属的镜头运动lora,需要放置在对应的位置。 stablediffusion位置: 运动模型放在stable-diffusion-webui\extensions\sd-webui-animatediff\model里面 运动lora放在stable-diffusion-web…

Spring源码学习三

手写Starter 我们通过手写Starter来加深对于自动装配的理解 1.创建一个Maven项目&#xff0c;quick-starter 定义相关的依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><versio…

通过conda search cuda找不到想要的信息,更换channel

目录 1. 通过conda search cuda找不到想要的信息&#xff0c;更换channel2. 不添加channel&#xff0c;直接conda search cudnn -i https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/报错了3. 推荐几个channel4. 想通过conda search应用这些channel&#xff0c;请给出…

etcd是什么

目录 1.关于etcd2.应用场景 本文主要介绍etcd 概念和基本应用场景。 1.关于etcd etcd是一个开源的、分布式的键值存储系统&#xff0c;用于共享配置和服务发现。它是由CoreOS团队开发的&#xff0c;主要用于实现分布式系统的配置管理和服务发现。 etcd的主要特性包括&#x…

Quartus 18.1软件及支持包安装教程

安装前最好关闭电脑的杀毒软件和防火墙 安装包可以到Quartus官网下载需要的版本&#xff0c;注意选择操作系统 Quartus官网&#xff1a;FPGA 设计软件 - 英特尔 Quartus Prime (intel.cn) 下载解压后以管理员的身份运行 QuartusSetup-18.1.0.625.exe文件&#xff0c;版本不同…

中国剩余定理CRT

文章目录 作用证明AcWing 204. 表达整数的奇怪方式CODE 作用 用于求模数两两互质的线性同余方程组&#xff0c;若不互质则不存在解。 《孙子算经》中有这样一个问题&#xff1a;“今有物不知其数&#xff0c;三三数之剩二&#xff0c;五五数之剩三&#xff0c;七七数之剩二&am…

【漏洞复现】CVE-2023-6848 kodbox远程命令执行

漏洞描述 kodbox 是一个网络文件管理器。它也是一个网页代码编辑器,允许您直接在网页浏览器中开发网站。您可以在基于 Linux、Windows 或 Mac 的平台上在线或本地运行 kodbox。唯一的要求是要有 PHP 5及以上。 kalcaddle kodbox 中发现漏洞,最高版本为 1.48。它已被宣布为关…

Flink系列之:Over聚合

Flink系列之&#xff1a;Over聚合 一、Over聚合二、ORDER BY三、PARTITION BY四、范围&#xff08;RANGE&#xff09;定义五、RANGE 间隔六、ROW 间隔 适用于流、批 一、Over聚合 OVER 聚合通过排序后的范围数据为每行输入计算出聚合值。和 GROUP BY 聚合不同&#xff0c; OV…

log4j2配置文件log4j2.xml详解

1、缺省默认配置文件 <?xml version"1.0" encoding"UTF-8"?><Configuration status"WARN"><Appenders><Console name"Console" target"SYSTEM_OUT"><PatternLayout pattern"%d{HH:mm:ss…

Android Studio Gradle构建很慢,下载依赖缓慢问题

在项目的 build.gradle或setting.gradle&#xff08;Android Studio新老版本配置不同&#xff09;中配置镜像源 阿里云&#xff1a; maven { url https://maven.aliyun.com/repository/gradle-plugin } maven { url https://maven.aliyun.com/repository/spring-plugin } mav…