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

LeetCode算法题(Go语言实现)_60

题目

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

一、代码实现(动态规划优化)

func minCostClimbingStairs(cost []int) int {n := len(cost)if n == 0 {return 0}if n == 1 {return cost[0]}prevPrev, prev := cost[0], cost[1]for i := 2; i < n; i++ {current := cost[i] + min(prev, prevPrev)prevPrev, prev = prev, current}return min(prev, prevPrev)
}func min(a, b int) int {if a < b {return a}return b
}

二、算法分析

1. 核心思路
  • 滚动数组优化:仅维护前两个状态值
  • 状态转移方程:dp[i] = cost[i] + min(dp[i-1], dp[i-2])
  • 边界处理
    • 直接处理n=0和n=1的特殊情况
    • 通过滚动变量避免O(n)空间复杂度
2. 关键步骤
  1. 初始化状态:prevPrev=cost[0], prev=cost[1]
  2. 迭代计算
    • 计算当前台阶的最小花费
    • 更新前两个状态值
  3. 结果返回:取最后两个状态的最小值
3. 复杂度
指标说明
时间复杂度O(n)线性遍历整个数组
空间复杂度O(1)仅使用三个临时变量

三、图解示例

在这里插入图片描述

四、边界条件与扩展

1. 特殊场景验证
  • 空数组:返回0(题目约束通常不存在)
  • 单台阶数组:直接返回cost[0]
  • 两台阶数组:取cost[0]和cost[1]较小值
  • 大数测试:n=1000时仍能高效计算
2. 扩展应用
  • 建筑成本优化:规划多层建筑的最优建造路径
  • 游戏AI寻路:动态计算移动消耗最小的路径
  • 投资决策:多阶段投资的最小成本路径选择
3. 多语言实现
class Solution {public int minCostClimbingStairs(int[] cost) {int n = cost.length;if (n == 1) return cost[0];int a = cost[0], b = cost[1];for (int i = 2; i < n; i++) {int c = cost[i] + Math.min(a, b);a = b;b = c;}return Math.min(a, b);}
}
class Solution:def minCostClimbingStairs(self, cost: List[int]) -> int:if len(cost) == 1:return cost[0]prev_prev, prev = cost[0], cost[1]for i in range(2, len(cost)):current = cost[i] + min(prev_prev, prev)prev_prev, prev = prev, currentreturn min(prev_prev, prev)

五、总结与优化

1. 算法对比
方法优势适用场景
动态规划最优时间复杂度常规需求
递归+记忆化代码直观教学演示
矩阵快速幂O(log n)时间复杂度极大n值计算
2. 工程优化
  • 循环展开:手动展开循环减少分支判断
  • SIMD指令:利用并行计算加速向量运算
  • 预计算缓存:存储常用值减少重复计算
3. 扩展方向
  • 三维路径规划:考虑空间中的多层移动成本
  • 随机成本模型:处理概率性变化的动态成本
  • 多目标优化:平衡时间和成本的双重约束
http://www.xdnf.cn/news/1757.html

相关文章:

  • Activepieces - 开源自动化工具
  • 基于crontabs对nginx日志进行定时切割
  • 新时代质量管理体系-端到端流程通俗演义,什么是端到端流程?
  • Ubuntu22学习记录
  • 编程技能:调试07,启动和禁用断点
  • 哈希表的实现
  • Tomcat Web应用(Ubuntu 18.04.6 LTS)部署笔记
  • [LangGraph教程]LangGraph04——支持人机协作的聊天机器人
  • Python:简介,Python解释器安装,第一个Python程序,开发环境(PyCharm安装和配置、Sublime安装和配置)
  • 5.学习笔记-SpringMVC(P61-P70)
  • 【大模型有哪些训练阶段?】
  • 模板偏特化 (Partial Specialization)
  • 类模板 (Class Templates)
  • 【需求墙上线】产品需求决定产品走向,邀您共建开源 LinkAndroid
  • JDK 21 的新特性:探索 Java 的最新进化
  • GLM-4V:多模态大模型在图像识别领域的突破性实践
  • 第六章:安全最佳实践
  • 2025磐石行动第七周WP
  • Long类型封装Json传输时精度丢失问题
  • 2024浙江省赛A Bingo
  • NOIP2013 提高组.转圈游戏
  • TIM输入捕获知识部分
  • 从零开始学习SLAM|技术路线
  • C++之类和对象:定义,实例化,this指针,封装
  • 【OpenCV图像处理实战】从基础操作到工业级应用
  • EFISH-SBC-RK3588 —— 厘米级定位 × 旗舰算力 × 工业级可靠‌
  • SpringBoot集成RabbitMQ使用过期时间+死信队列实现延迟队列
  • Linux系统----进程的状态
  • [创业之路-384]:企业法务 - 初创公司,如何做好知识产品的风险防范?
  • 质检LIMS系统在金融咨询行业的应用 金融咨询行业的实验室数字化