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)和状态转移逻辑。此方法可扩展至类似路径选择问题,如带权重的跳跃游戏等。

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

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

相关文章

游戏开发中的贝塞尔曲线:感受丝滑的数学之美

这是一篇vip文章,如果你还不是vip,可以移步https://www.ilikexff.cn/articles/165免费阅读。 介绍 贝塞尔曲线是计算机图形学中最重要的概念之一,以其在表示曲线时的灵活性和精确性而闻名。广泛应用于计算机图形学、动画、路径规划等领域的数学曲线。 贝塞尔曲线的数学原理基…

强化学习课程:stanford_cs234 学习笔记(2)introduction to RL

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言5、强化学习课程大纲5.1 课程内容主&#xff1a;5.2 马尔可夫决策过程&#xff1a;5.2.1 马尔可夫性 markov propterty5.2.2 马尔可夫过程 markov process5.2.3…

第 26 场 蓝桥月赛 部分题解

第 26 场 蓝桥月赛 2.灯笼猜谜3.元宵分配4.摆放汤圆5.元宵交友&#xff08;运行超时 通过90%&#xff09; 2.灯笼猜谜 分析&#xff1a;以当前位置为视角&#xff0c;要想移动的距离尽可能的少&#xff0c;按顺序猜谜语&#xff0c;给你一个区间&#xff0c;有三种情况&#xf…

JAVA实战开源项目:体育馆使用预约平台(Vue+SpringBoot) 附源码

本文项目编号 T 144 &#xff0c;文末自助获取源码 \color{red}{T144&#xff0c;文末自助获取源码} T144&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

解决【vite-plugin-top-level-await】 插件导致的 Bindings Not Found 错误

解决【vite-plugin-top-level-await】 插件导致的 Bindings Not Found 错误 环境设置 操作系统: macOS硬件平台: M1 Pro前端框架: Vue 3Node.js 版本: 20 在使用 Vue 项目时&#xff0c;我们尝试集成 vite-plugin-top-level-await 插件以支持顶层 await 语法。然而&#xff…

推荐系统(十九):优势特征蒸馏(Privileged Features Distillation)在商品推荐中的应用(二)

在上一篇文章《推荐系统(十八):优势特征蒸馏(Privileged Features Distillation)在商品推荐中的应用》中,笔者实现了一个基于 PFD 思想的 Demo。其中,Teacher 模型和 Student 模型都是简单的单任务(CTR)模型,在本节,笔者将基于 PFD 思想实现一个多任务模型:其中,Tea…

深度学习之卷积

从全连接到卷积 MLP的缺陷&#xff0c;假设有如下的场景&#xff1a; 分类猫和狗的图片 使用一个还不错的相机采集图片&#xff08;12M像素)RGB图片有 36M元素使用100大小的单隐藏层MLP&#xff0c;模型有 3.6B元素 远多于世界上所有猫和狗总数(900M狗&#xff0c;600M猫) …

目标识别与双目测距(1)环境搭建:Ubuntu+yolov5+pcl库

环境情况 ubuntu 18.04 → 20.04&#xff08;最终&#xff09; 安装Ubuntu1804虚拟机系统 Anaconda&#xff1a;可参考我的另一篇文章 Python 3.6.13 → 3.8&#xff08;最终&#xff09;Anaconda3-2021.05 目标识别&#xff1a;YOLOv5相关 1、安装git sudo apt install gi…

LinuxTCP/UDP基础概念

TCP&#xff08;传输控制协议&#xff09; TCP 是一种面向连接的、可靠的、基于字节流的传输层通信协议。它的主要特点包括&#xff1a; 面向连接&#xff1a;在传输数据之前&#xff0c;需要通过“三次握手”建立连接&#xff1b;传输结束后&#xff0c;通过“四次挥手”断开…

MP3、WAV、RM、PNG格式

MP3、WAV、RM、PNG格式 MP3 是一种音频压缩格式,采用了 MPEG-1 Audio Layer 3 或 MPEG-2 Audio Layer 3 编码标准.MP3 格式能够以较小的文件大小存储高质量的音频,可在多种设备如手机、MP3 播放器、电脑上播放,是目前应用最广泛的音频格式之一. MPEG-1 是MPEG(Moving Pictu…

力扣hot100:滑动窗口——找到字符串中所有字母异位词

题目链接&#xff1a;找到字符串中所有字母异位词 考虑用滑动窗口&#xff0c;窗口大小固定为字符串p的长度&#xff0c;用一个for循环控制子串的结束位置。 怎么判断是字母异位词&#xff1f; 1、排序&#xff1a;字符串中所有符合条件的字母异位词与目标串p在经过排序后是…

人工智能通识速览一(神经网络)(编辑中)

上篇&#xff1a;人工智能通识速览一&#xff08;机器学习&#xff09; 人工智能通识速览一&#xff08;机器学习&#xff09;&#xff08;编辑中&#xff09;-CSDN博客https://blog.csdn.net/siper12138/article/details/146512068?sharetypeblogdetail&sharerId1465120…

【数据标准】数据标准化框架体系-基础类数据标准

导读&#xff1a;数据标准化的四大基础类标准&#xff08;业务术语、业务规则、命名规范、代码标准&#xff09;是企业数据治理的核心支柱。主要作用体现在​消除业务与技术间的语义鸿沟​&#xff08;通过统一术语与命名规范&#xff09;&#xff0c;​保障数据全生命周期的质…

可发1区的超级创新思路(python\matlab实现):MPTS+Lconv+注意力集成机制的Transformer时间序列模型

首先声明,该模型为原创!原创!原创!且该思路还未有成果发表,感兴趣的小伙伴可以借鉴! 应用场景 该模型主要用于时间序列数据预测问题,包含功率预测、电池寿命预测、电机故障检测等等。 一、模型整体架构(本文以光伏功率预测为例) 本模型由多尺度特征提取模块(MPTS)…

深入解析C#中的解释器模式:原理与应用

解释器模式&#xff08;Interpreter Pattern&#xff09;是一种行为型设计模式&#xff0c;旨在为特定的语言提供解释和执行的能力。该模式将语言的文法规则封装在类中&#xff0c;使得能够灵活、动态地对这些规则进行解释。在实际开发中&#xff0c;尤其是处理一些定制的表达式…

LeetCode知识点整理

1、Scanner 输入&#xff1a; import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);// 读取整数int num scanner.nextInt();// 读取一行字符串String line scanner.nextLine();scanner.close();…

红宝书第二十一讲:详解JavaScript的模块化(CommonJS与ES Modules)

红宝书第二十一讲&#xff1a;详解JavaScript的模块化&#xff08;CommonJS与ES Modules&#xff09; 资料取自《JavaScript高级程序设计&#xff08;第5版&#xff09;》。 查看总目录&#xff1a;红宝书学习大纲 一、模块化的意义&#xff1a;分而治之 模块化解决代码依赖混…

Android Product Flavors 深度解析与最佳实践:构建多版本应用的全方位指南

1. 高效配置模板 1.1 现代化多维度配置 (Kotlin DSL) android {flavorDimensions listOf("version", "market", "environment")productFlavors {register("free") {dimension "version"applicationIdSuffix ".free…

QListView开发入门

1. QListView 基础介绍 QListView 是 Qt 框架中用于显示项目列表的控件&#xff0c;属于模型/视图架构的一部分。它提供了一种灵活的方式来显示和操作项目列表。 主要特点&#xff1a; 基于模型/视图架构 支持多种视图模式&#xff08;列表、图标&#xff09; 内置选择、编…

Cookie可以存哪些指?

Cookie是一种小型文本文件&#xff0c;通常由服务器生成并发送到用户浏览器中保存。它可以用于存储一些简单但非常有用的信息&#xff0c;以便于后续请求时自动附带回服务器使用。下面是Cookie能够存储的一些典型内容类别及用途说明&#xff1a; 会话标识符(Session ID) 这是最…