news 2026/6/23 18:48:57

LeetCode Hot100 接雨水解题思路详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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),留作进阶思考。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/23 0:10:18

Windows驱动管理革命:Driver Store Explorer全面实战指南

还在为Windows驱动冲突烦恼吗&#xff1f;Driver Store Explorer&#xff08;RAPR&#xff09;这款免费开源工具&#xff0c;让驱动管理变得像点鼠标一样简单。无论你是普通用户还是技术爱好者&#xff0c;都能轻松驾驭系统驱动存储库&#xff0c;解决硬件兼容性难题。 【免费下…

作者头像 李华
网站建设 2026/6/23 11:54:39

Get-cookies.txt-LOCALLY:本地Cookie导出终极指南,隐私安全无忧

Get-cookies.txt-LOCALLY&#xff1a;本地Cookie导出终极指南&#xff0c;隐私安全无忧 【免费下载链接】Get-cookies.txt-LOCALLY Get cookies.txt, NEVER send information outside. 项目地址: https://gitcode.com/gh_mirrors/ge/Get-cookies.txt-LOCALLY 在当今数字…

作者头像 李华
网站建设 2026/6/23 18:41:36

云原生API网关认证终极指南:5步搞定Hydra+APISIX高可用集成

你是否正在为微服务架构中的API安全认证而头疼&#xff1f;传统的认证方案要么与业务代码紧密耦合&#xff0c;要么扩展性不足&#xff0c;难以应对云原生环境的复杂需求。今天&#xff0c;我将为你揭示一套基于Ory Hydra和APISIX的强力认证解决方案&#xff0c;让你在5个简单步…

作者头像 李华
网站建设 2026/6/23 1:30:41

文件哈希值批量修改新方案:告别传统计算的效率革命

文件哈希值批量修改新方案&#xff1a;告别传统计算的效率革命 【免费下载链接】HashCalculator 一个文件哈希值批量计算器&#xff0c;支持将结果导出为文本文件功能和批量检验哈希值功能。 项目地址: https://gitcode.com/gh_mirrors/ha/HashCalculator 在日常文件管理…

作者头像 李华
网站建设 2026/6/23 18:33:34

Beyond Compare 5完整使用指南:三步实现免费授权

还在为文件对比工具Beyond Compare的授权费用而困扰吗&#xff1f;作为程序员和设计师必备的效率工具&#xff0c;其强大的功能确实令人难以割舍。今天分享的这套完整使用方案&#xff0c;将彻底解决你的授权烦恼。 【免费下载链接】BCompare_Keygen Keygen for BCompare 5 项…

作者头像 李华
网站建设 2026/6/22 23:41:29

ComfyUI-Manager终极指南:一键配置AI绘画管理平台

ComfyUI-Manager终极指南&#xff1a;一键配置AI绘画管理平台 【免费下载链接】ComfyUI-Manager 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-Manager ComfyUI-Manager彻底颠覆了传统AI绘画插件的安装方式&#xff0c;让繁琐的技术操作变得简单直观。这个强大…

作者头像 李华