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

LeetCode Hot100 接雨水解题思路详解

LeetCode Hot100:接雨水解题思路详解

题目描述

给定n个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。

例如,输入height = [0,1,0,2,1,0,1,3,2,1,2,1],输出为6

解题思路

这道题的核心思想是:对于每一个位置i,它能够存储的雨水量取决于其左右两侧最高柱子中的较小值与当前柱子高度的差值。

具体步骤如下:
  1. 定义状态

    • leftMax[i]表示从左端到位置i的最大高度。
    • rightMax[i]表示从右端到位置i的最大高度。
  2. 预处理左右最大值数组

    • 从左向右遍历,填充leftMax数组:
      leftMax[0] = height[0]; for (int i = 1; i < n; i++) { leftMax[i] = Math.max(height[i], leftMax[i - 1]); }
    • 从右向左遍历,填充rightMax数组:
      rightMax[n - 1] = height[n - 1]; for (int i = n - 2; i >= 0; i--) { rightMax[i] = Math.max(height[i], rightMax[i + 1]); }
  3. 计算每个位置的积水量对于每个位置i,其能接的雨水量为:

    min(leftMax[i], rightMax[i]) - height[i]

    将所有位置的积水量累加即可得到答案。

  4. 返回结果最终将总和ans返回。

完整代码实现

class Solution { public int trap(int[] height) { int n = height.length; if (n == 0) return 0; int[] leftMax = new int[n]; int[] rightMax = new int[n]; // 构建 leftMax leftMax[0] = height[0]; for (int i = 1; i < n; i++) { leftMax[i] = Math.max(height[i], leftMax[i - 1]); } // 构建 rightMax rightMax[n - 1] = height[n - 1]; for (int i = n - 2; i >= 0; i--) { rightMax[i] = Math.max(height[i], rightMax[i + 1]); } // 计算总积水量 int ans = 0; for (int i = 0; i < n; i++) { ans += Math.min(leftMax[i], rightMax[i]) - height[i]; } return ans; } }

时间复杂度分析

  • 时间复杂度:O(n),三次线性扫描。
  • 空间复杂度:O(n),使用了两个额外数组leftMaxrightMax

总结

该方法通过预处理左右最大值,避免了在每个位置重复查找最大值,从而提升了效率。虽然空间复杂度较高,但逻辑清晰,易于理解和实现。

提示:此题还可以用双指针法优化空间复杂度至 O(1),留作进阶思考。

http://www.jsqmd.com/news/95147/

相关文章:

  • FLUX.1-dev多模态模型实战:从git下载到Docker Compose一键启动
  • Windows远程桌面多用户连接终极指南:RDP Wrapper完全解锁方案
  • 2025最新热熏蒸舱品牌TOP5评测!科技赋能健康管理,行业优质公司榜单助力科学养生选择 - 全局中转站
  • 文件哈希值批量修改新方案:告别传统计算的效率革命
  • Docker 搭建漏洞环境:转行网络安全高效练手的方法(附镜像清单)
  • 5大实战技巧!ColorUI选项卡组件助你打造高效移动端导航
  • 2025年12月15日 记
  • 纯前端Word生成利器:DOCX.js浏览器端文档创建教程
  • 终极SQLite到MySQL迁移指南:5分钟完成数据库无缝转换
  • 【收藏必备】智能体系统路由模块全解析:4种实现模式对比与实战建议
  • 智能健康数据管理2025终极指南:免费多平台步数同步完整方案
  • 【收藏必看】从RAG到AI Agent开发全踩坑指南:3个月实战经验总结
  • BBDown完整教程:5步掌握B站视频下载终极方法
  • dnSpy异常调试实战:从空引用定位到堆栈深度分析
  • 动态规划优化方法大全
  • JavaScript性能优化实战:从瓶颈识别到极致体验
  • 2025最新面部抗衰仪器品牌TOP4评测!科技赋能抗衰新体验,行业优质公司榜单助您甄选理想抗衰方案 - 全局中转站
  • 网络安全核心领域解析:哪些方向适合转行人群?
  • Editly容器化部署:革新视频创作工作流的终极方案
  • 2025最新AI舌诊品牌TOP5评测!健康管理领域优质公司榜单发布,科技赋能守护全民健康 - 全局中转站
  • Beyond Compare 5完整使用指南:三步实现免费授权
  • 1、CentOS 7 入门与基础操作指南
  • Git下载Qwen3-VL-8B源码时必须注意的权限问题
  • 2025最新负氧离子微高压氧舱品牌TOP5评测!创新科技+专业服务,行业优质公司榜单发布,赋能健康管理新生态 - 全局中转站
  • Joy-Con Toolkit:专业游戏手柄调校工具使用指南
  • 2025年降AI率工具和查AI率工具汇总,实测AI率低于20%
  • 告别.NET调试噩梦:dnSpy实战手册让你的异常无处遁形
  • 2、CentOS 7安装与命令行使用指南
  • SQLPad查询结果缓存配置完全指南:优化重复查询性能
  • 外勤app排行榜:哪款软件适合中小企业? - 企业数字化观察家