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

1.3 斐波那契数列模型:LeetCode 746. 使用最小花费爬楼梯


动态规划解最小花费爬楼梯问题:LeetCode 746. 使用最小花费爬楼梯


1. 题目链接

LeetCode 746. 使用最小花费爬楼梯
题目要求:给定一个整数数组 cost,其中 cost[i] 是从楼梯第 i 阶向上爬所需支付的费用。你可以从下标 01 的台阶开始爬,每次爬1或2阶,计算达到楼梯顶部(数组末尾之后)的最小花费。


2. 题目描述
  • 输入:整数数组 cost,例如 [10, 15, 20]
  • 输出:最小花费,例如 15(从下标1开始,直接走两步到达顶部)。
  • 约束条件
    • 2 ≤ cost.length ≤ 1000
    • 0 ≤ cost[i] ≤ 999

3. 示例分析

示例 1
输入:cost = [10, 15, 20]
输出:15
解释

  • 从下标1开始,支付15,走两步直接到达顶部,总花费为15。

示例 2
输入:cost = [1, 100, 1, 1, 1, 100, 1, 1, 100, 1]
输出:6
解释

  • 路径为 0→2→4→6→7→9→顶部,总花费为 1+1+1+1+1+1=6

4. 算法思路
动态规划递推
  1. 状态定义

    • dp[i] 表示到达第 i 阶的最小累计花费。
    • 注意:顶部位于第 n 阶(n = cost.size()),因此需要计算 dp[n]
  2. 状态转移方程

    • 到达第 i 阶的最小花费由前两阶的花费决定:
      dp[i] = min(dp[i-1] + cost[i-1], dp[i-2] + cost[i-2])
    • 解释:可以从第 i-1 阶走1步,或从第 i-2 阶走2步到达第 i 阶。
  3. 初始条件

    • dp[0] = 0(从起点开始,无需站在下标0的台阶)。
    • dp[1] = 0(从起点开始,直接选择下标1的台阶,无需支付下标1的费用)。

5. 边界条件与注意事项
  1. 边界处理

    • cost 数组长度为 1 时,直接返回 0(无需支付任何费用即可到达顶部)。
    • 当长度为 2 时,返回 min(cost[0], cost[1])
  2. 时间复杂度O(n),只需遍历一次数组。

  3. 空间优化:可进一步优化为滚动变量,将空间复杂度从 O(n) 降至 O(1)


6. 代码实现与解析
class Solution {
public:int minCostClimbingStairs(vector<int>& cost) {int n = cost.size();if (n == 0) return 0;    // 处理空数组(题目约束n≥2,实际无需)if (n == 1) return 0;     // 关键修正:避免越界vector<int> dp(n + 1, 0); // dp[i]表示到达第i阶的最小花费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];}
};
代码解析
  1. 初始化处理
    • 直接处理 n=0n=1 的情况,避免越界错误。
  2. 动态规划数组
    • dp[0]dp[1] 初始化为 0,因为从起点可以选择直接站在下标0或1的位置。
  3. 递推计算
    • i=2 开始,计算到达每阶的最小花费,确保每次取最小值。
  4. 返回值
    • dp[n] 表示到达顶部(第 n 阶之后)的最小花费。

总结

通过动态规划递推能够高效解决最小花费爬楼梯问题。关键点在于正确处理边界条件(如 n=1)和状态转移逻辑。此方法可扩展至类似路径选择问题,如带权重的跳跃游戏等。

相关文章:

1.3 斐波那契数列模型:LeetCode 746. 使用最小花费爬楼梯

动态规划解最小花费爬楼梯问题&#xff1a;LeetCode 746. 使用最小花费爬楼梯 1. 题目链接 LeetCode 746. 使用最小花费爬楼梯 题目要求&#xff1a;给定一个整数数组 cost&#xff0c;其中 cost[i] 是从楼梯第 i 阶向上爬所需支付的费用。你可以从下标 0 或 1 的台阶开始爬&a…...

5.0 WPF的基础介绍1-Grid,Stack,button

WPF: Window Presentation Foundation. WPF与WinForms的对比如下&#xff1a; 特性WinFormsWPF技术基础基于传统的GDI&#xff08;图形设备接口&#xff09;基于DirectX&#xff0c;支持硬件加速的矢量渲染UI设计方式拖拽控件事件驱动代码&#xff08;简单但局限&#xff09;…...

Docker 端口映射原理

在 Docker 中&#xff0c;默认情况下容器无法直接与外部网络通信。 为了使外部网络能够访问容器内的服务&#xff0c;Docker 提供了端口映射功能&#xff0c;通过将宿主机的端口映射到容器内的端口&#xff0c;外部可以通过宿主机的IP和端口访问容器内的服务 以下通过动手演示…...

SDL —— 将sdl渲染画面嵌入Qt窗口显示(附:源码)

🔔 SDL/SDL2 相关技术、疑难杂症文章合集(掌握后可自封大侠 ⓿_⓿)(记得收藏,持续更新中…) 效果 使用QWidget加载了SDL的窗口,渲染器使用硬件加速跑GPU的。支持Qt窗口缩放或显示隐藏均不影响SDL的图像刷新。   操作步骤 1、在创建C++空工程时加入SDL,引入头文件时需…...

算法每日一练 (23)

&#x1f4a2;欢迎来到张翊尘的技术站 &#x1f4a5;技术如江河&#xff0c;汇聚众志成。代码似星辰&#xff0c;照亮行征程。开源精神长&#xff0c;传承永不忘。携手共前行&#xff0c;未来更辉煌&#x1f4a5; 文章目录 算法每日一练 (23)最大正方形题目描述解题思路解题代码…...

UE5学习笔记 FPS游戏制作28 显式玩家子弹数

文章目录 添加变量修改ShootOnce方法&#xff0c;设计时减少子弹&#xff0c;没有子弹不能开枪在UI上显示 添加变量 在Gun类中添加BulletNum和ClipSize两个参数 BulletNum是当前还有多少子弹&#xff0c;ClipSize是一个弹匣多少子弹 Rifle的ClipSzie设置为30&#xff0c;Laun…...

2025前端八股文终极指南:从高频考点到降维打击的面试突围战

2025前端八股文终极指南&#xff1a;从高频考点到降维打击的面试突围战 一、2025前端八股文核心考点重构 1.1 新型响应式系统三连问 Vue3信号式响应性&#xff1a; // 信号式响应性底层实现 const [count, setCount] createSignal(0) effect(() > {console.log("当…...

《深入探索 Python 数据分析:用 Pandas 高效处理与可视化大型数据集》

《深入探索 Python 数据分析:用 Pandas 高效处理与可视化大型数据集》 引言:从零到分析高手 数据是当代社会最宝贵的资源,而数据分析技能是现代职业人不可或缺的一部分。在数据科学的领域中,Python 已成为当之无愧的“首选语言”,其强大的生态系统和简洁的语法让人如虎添…...

【实战】渗透测试下的文件操作

目录 Linux查找文件 Windows查找文件 查找可写目录 windows Linux 创建 Windows Linux 压缩 解压 远程解压文件 Linux查找文件 >find / -name index.php 查找木马文件 >find . -name *.php | xargs grep -n eval( >find . -name *.php | xargs grep -n ass…...

基于深度神经网络的图像防篡改检测方法研究

标题:基于深度神经网络的图像防篡改检测方法研究 内容:1.摘要 随着数字化时代的发展&#xff0c;图像篡改现象日益普遍&#xff0c;严重影响了图像信息的真实性和可靠性。本文旨在研究基于深度神经网络的图像防篡改检测方法&#xff0c;以有效识别被篡改的图像。通过收集大量真…...

vue如何实现前端控制动态路由

在 Vue.js 中&#xff0c;动态路由是一种根据不同用户权限或其他因素动态改变路由列表的功能。这种机制允许开发者根据后端提供的权限数据动态渲染前端路由&#xff0c;实现多用户权限系统&#xff0c;不同用户展示不同的导航菜单。 动态路由的配置 动态路由的配置涉及到前端…...

学成在线--day02

复习知识点 classPath&#xff1a; 类加载路径,也就是jvm找字节码文件的路径&#xff0c;我们自己写的类&#xff0c;以及依赖的包&#xff0c;都会放到这个路径下面用于加载。 跨域问题&#xff1a; 是由于浏览器的同源策略&#xff08;协议&#xff0c;端口&#xff0c;ip…...

《构建有效的AI代理》学习笔记

原文链接:https://www.anthropic.com/engineering/building-effective-agents 《构建有效的AI代理》学习笔记 一、概述 核心结论 • 成功的AI代理系统往往基于简单、可组合的模式&#xff0c;而非复杂框架。 • 需在性能、成本与延迟之间权衡&#xff0c;仅在必要时增加复杂度…...

Go语言基础:数据类型

一、基础数据类型&#xff1a;Go语言的积木块 1.1 数字类型全家福 package mainimport ("fmt" )func main() {// 有符号整数类型var a int 42 // int 类型&#xff0c;自动选择32或64位var b int8 127 // int…...

数据处理专题(四)

目标 使用 Matplotlib 进行基本的数据可视化。‍ 学习内容 绘制折线图 绘制散点图 绘制柱状图‍ 代码示例 1. 导入必要的库 import matplotlib.pyplot as pltimport numpy as npimport pandas as pd 2. 创建示例数据集 # 创建示例数据集data { 月份: [1月, 2月, 3…...

【目标检测】【深度学习】【Pytorch版本】YOLOV1模型算法详解

【目标检测】【深度学习】【Pytorch版本】YOLOV1模型算法详解 文章目录 【目标检测】【深度学习】【Pytorch版本】YOLOV1模型算法详解前言YOLOV1的模型结构YOLOV1模型的基本执行流程YOLOV1模型的网络参数YOLOV1模型的训练方式 YOLOV1的核心思想前向传播阶段网格单元(grid cell)…...

云钥科技多通道工业相机解决方案设计

项目应用场景分析与需求挑战 1. 应用场景 ‌目标领域‌&#xff1a;工业自动化检测&#xff08;如精密零件尺寸测量、表面缺陷检测&#xff09;、3D立体视觉&#xff08;如物体建模、位姿识别&#xff09;、动态运动追踪&#xff08;如高速生产线监控&#xff09;等。 ‌核心…...

从零到一:ESP32与豆包大模型的RTC连续对话实现指南

一、对话效果演示 ESP32与豆包大模型的RTC连续对话 二、ESP-ADF 介绍 乐鑫 ESP-ADF&#xff08;Espressif Audio Development Framework&#xff09;是乐鑫科技&#xff08;Espressif Systems&#xff09;专为 ESP32 系列芯片开发的一款音频开发框架。它旨在简化基于 ESP32 芯…...

【深度学习与实战】2.3、线性回归模型与梯度下降法先导案例--最小二乘法(向量形式求解)

为了求解损失函数 对 的导数&#xff0c;并利用最小二乘法向量形式求解 的值‌ 这是‌线性回归‌的平方误差损失函数&#xff0c;目标是最小化预测值 与真实值 之间的差距。 ‌损失函数‌&#xff1a; 考虑多个样本的情况&#xff0c;损失函数为所有样本的平方误差之和&a…...

【Django】教程-2-前端-目录结构介绍

【Django】教程-1-安装创建项目目录结构介绍 3. 前端文件配置 3.1 目录介绍 在app下创建static文件夹, 是根据setting中的配置来的 STATIC_URL ‘static/’ templates目录&#xff0c;编写HTML模板&#xff08;含有模板语法&#xff0c;继承&#xff0c;{% static ‘xx’ …...

JS判断对象是否为空的方法

在 JavaScript 中&#xff0c;判断一个对象是否为空对象&#xff08;即没有自身可枚举属性&#xff09;&#xff0c;可以通过以下方法实现&#xff1a; 方法 1&#xff1a;使用 Object.keys() javascript function isEmptyObject(obj) {// 确保是普通对象&#xff08;排除 n…...

详解list容器

1.list的介绍 list的底层结构是双向带头循环链表&#xff0c;允许随机的插入和删除&#xff0c;但其内存空间不是连续的。随机访问空间能力差&#xff0c;需要从头到尾遍历节点&#xff0c;不像vector一样高效支持 2.list的使用 构造函数 1.默认构造函数&#xff1a;创建一个…...

leetcode_977. 有序数组的平方_java

977. 有序数组的平方https://leetcode.cn/problems/squares-of-a-sorted-array/ 1.题目 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。 示例 1&#xff1a; 输入&#xff1a;nums [-4,-1…...

Spring Boot 3.4.3 基于 SpringDoc 2 和 Swagger 3 实现项目接口文档管理

在现代企业级应用开发中&#xff0c;前后端分离已成为主流模式&#xff0c;前端负责界面呈现&#xff0c;后端专注提供 RESTful API 接口。然而&#xff0c;接口文档的编写和维护往往是开发过程中的痛点。Spring Boot 3.4.3 结合 SpringDoc 2 和 Swagger 3&#xff0c;为开发者…...

前端面经分享(25/03/26)

北京一家做AI解决方案的公司&#xff0c;技术一面&#xff0c;15k-20k&#xff0c;要求3-5年 你们React项目里路由模式用的什么React里class组件和function组件都用过吗常用Hook&#xff0c;解释一下他们的作用useEffect第二个参数填空数组和不填有什么区别React组件通信的常用…...

Matlab基础知识与常见操作【无痛入门】

【1】Matlab基本概念 【2】Matlab程序设计 【3】Matlab图形绘制 以上三篇文章为Matlab主要的应用场景&#xff0c;我在学习的过程中做一下记录&#xff0c;方便以后回顾。 接下来介绍下Matlab的工作界面&#xff0c;以及如何高效率的应用Matlab的帮助手册。在我看来&#x…...

HTTP协议手写服务器

目录 一、请求的是Web根目录 二、GET方法通过URL传参 三、根据资源类型对应出Content-Type值 四、Http代码 项目完整源代码&#xff1a;Http 周不才/cpp_linux study - 码云 - 开源中国 一、请求的是Web根目录 如果URL中请求的资源是Web根目录&#xff0c;则自动跳转到主…...

网络探索之旅:网络原理(第二弹)

上篇文章&#xff0c;小编分享了应用层和传输层深入的一点的知识&#xff0c;那么接下来&#xff0c;这篇文章&#xff0c;继续分享网络层和数据链路层。 网络层 了解这个网络层&#xff0c;那么其实就是重点来了解下IP这个协议 对于这个协议呢&#xff0c;其实也是和前面的…...

深入剖析 JVM:从组成原理到调优实践

深入剖析 JVM&#xff1a;从组成原理到调优实践 深入剖析 JVM&#xff1a;从组成原理到调优实践一、JVM 组成架构&#xff1a;运行 Java 程序的 “幕后引擎”1.1 内存结构&#xff1a;数据存储的 “分区管理”1.2 执行引擎&#xff1a;字节码的 “翻译官”1.3 本地方法接口&…...

阿里云下一代可观测时序引擎-MetricStore 2.0

作者&#xff1a;徐昊&#xff08;博澍&#xff09; 背景 作为可观测场景使用频度最高的数据类型&#xff0c;Metrics 时序数据在可观测领域一直占有着重要地位&#xff0c;无论是从全局视角来观测系统整体状态&#xff0c;还是从大范围数据中定位某一个异常的位置&#xff0…...