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

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. 扩展方向
  • 三维路径规划:考虑空间中的多层移动成本
  • 随机成本模型:处理概率性变化的动态成本
  • 多目标优化:平衡时间和成本的双重约束

相关文章:

  • 【python】一文掌握 markitdown 库的操作(用于将文件和办公文档转换为Markdown的Python工具)
  • 第1讲:Transformers 的崛起:从RNN到Self-Attention
  • 【AI提示词】艺人顾问
  • 实验三 进程间通信实验
  • Flink介绍——实时计算核心论文之Flink论文
  • 入门-C编程基础部分:19、输入 输出
  • nuxt3持久化存储全局变量
  • 深入浅出:Pinctrl与GPIO子系统详解
  • 模板偏特化 (Partial Specialization)
  • 开源漏洞扫描器:OpenVAS
  • Python函数与模块笔记
  • 【大模型实战】大模型推理加速框架 vllm 部署的方案
  • 使用String path = FileUtilTest.class.getResource(“/1.txt“).getPath(); 报找不到路径
  • 【Linux系统篇】:什么是信号以及信号是如何产生的---从基础到应用的全面解析
  • echart实现柱状图并实现柱子上方需要显示指定文字,以及悬浮出弹框信息,动态出现滚动条,动态更新x,y轴的坐标名称
  • linux sudo 命令介绍
  • NVIDIA高级辅助驾驶安全报告解析
  • 差分信号抗噪声原理:
  • 浔川代码编辑器v2.0(测试版)更新公告
  • 基于事件驱动的云原生后端架构设计:从理念到落地
  • 马上评丨喷淋头全是摆设,酒店消防岂能“零设防”
  • 预热苏杯,“谁羽争锋”全国新闻界羽毛球团体邀请赛厦门开赛
  • 李家超称香港将部署为内地企业提供供应链服务,突破美国封锁
  • 湖南省郴州市统战部部长黄峥嵘主动交代问题,接受审查调查
  • 商务部召开外资企业圆桌会
  • 中纪报刊文:新时代反腐败斗争为党赢得历史主动