news 2026/4/18 2:14:45

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/4/17 19:04:05

快速掌握MouseClick:5个技巧让你的重复点击自动化

还在为每天重复的鼠标点击操作感到疲惫吗&#xff1f;MouseClick鼠标自动连点器正是你需要的效率工具&#xff01;这款跨平台点击工具能够智能模拟鼠标动作&#xff0c;帮你从繁琐的重复劳动中解放双手&#xff0c;实现工作效率提升。 【免费下载链接】MouseClick &#x1f5b1…

作者头像 李华
网站建设 2026/4/18 3:37:56

揭秘Python密钥生成:从算法原理到实战应用的技术深度解析

揭秘Python密钥生成&#xff1a;从算法原理到实战应用的技术深度解析 【免费下载链接】BCompare_Keygen Keygen for BCompare 5 项目地址: https://gitcode.com/gh_mirrors/bc/BCompare_Keygen 在软件授权验证的领域中&#xff0c;密钥生成技术始终扮演着关键角色。今天…

作者头像 李华
网站建设 2026/4/18 12:59:11

UABEA实战宝典:从零掌握Unity资源处理核心技术

为什么你需要掌握UABEA&#xff1f; 【免费下载链接】UABEA UABEA: 这是一个用于新版本Unity的C# Asset Bundle Extractor&#xff08;资源包提取器&#xff09;&#xff0c;用于提取游戏中的资源。 项目地址: https://gitcode.com/gh_mirrors/ua/UABEA 在游戏开发的世界…

作者头像 李华
网站建设 2026/4/18 3:37:57

layui-vue:重新定义企业级前端开发体验

你是否曾为复杂的前端组件配置而烦恼&#xff1f;是否在寻找一个既能快速上手又能支撑大型项目的解决方案&#xff1f;layui-vue正是为此而生——一个基于Vue 3的企业级UI组件库&#xff0c;让前端开发回归简单高效。 【免费下载链接】layui-vue An enterprise-class UI compon…

作者头像 李华
网站建设 2026/4/18 3:28:15

终极帧率解锁指南:如何突破原神60fps限制实现游戏性能大提升

终极帧率解锁指南&#xff1a;如何突破原神60fps限制实现游戏性能大提升 【免费下载链接】genshin-fps-unlock unlocks the 60 fps cap 项目地址: https://gitcode.com/gh_mirrors/ge/genshin-fps-unlock 想要在原神中体验更流畅的战斗画面和更丝滑的探索过程吗&#xf…

作者头像 李华