news 2026/5/1 13:57:40

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/5/1 8:55:11

mootdx开源工具:通达信数据读取的完整解决方案

mootdx开源工具&#xff1a;通达信数据读取的完整解决方案 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx 在金融数据分析和量化交易领域&#xff0c;通达信软件提供了丰富的市场数据资源。mootdx…

作者头像 李华
网站建设 2026/5/1 8:55:15

5分钟搞定wiliwili:从启动失败到流畅播放的完整解决方案

5分钟搞定wiliwili&#xff1a;从启动失败到流畅播放的完整解决方案 【免费下载链接】wiliwili 专为手柄控制设计的第三方跨平台B站客户端&#xff0c;目前可以运行在PC全平台、PSVita、PS4 和 Nintendo Switch上 项目地址: https://gitcode.com/GitHub_Trending/wi/wiliwili…

作者头像 李华
网站建设 2026/5/1 6:04:29

Editly容器化部署:革新视频创作工作流的终极方案

在当今数字内容爆炸的时代&#xff0c;视频创作已成为个人表达和企业营销的重要方式。然而&#xff0c;传统视频编辑软件复杂的安装过程、版本依赖冲突以及跨平台兼容性问题&#xff0c;让许多创作者望而却步。Editly容器化部署方案应运而生&#xff0c;彻底改变了这一现状&…

作者头像 李华
网站建设 2026/5/1 8:37:51

7步掌握思源宋体:免费商用中文字体的终极解决方案

7步掌握思源宋体&#xff1a;免费商用中文字体的终极解决方案 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 还在为寻找高质量的中文字体而烦恼吗&#xff1f;Source Han Serif TTF&a…

作者头像 李华
网站建设 2026/5/1 8:19:04

ARP扫描技术深度解析:从原理到实战的完整掌握

ARP扫描技术深度解析&#xff1a;从原理到实战的完整掌握 【免费下载链接】arp-scan The ARP Scanner 项目地址: https://gitcode.com/gh_mirrors/ar/arp-scan 在网络探测技术领域&#xff0c;ARP扫描以其独特的工作机制和高效的设备发现能力脱颖而出。不同于传统的端口…

作者头像 李华
网站建设 2026/5/1 7:13:01

2、CentOS 7安装与命令行使用指南

CentOS 7安装与命令行使用指南 1. CentOS 7介绍 CentOS(Community Enterprise Operating System)是一个快速、稳定且开源的企业级Linux发行版,可用于笔记本电脑、桌面计算机和服务器。它基于Red Hat Enterprise Linux(RHEL)的源代码开发,由CentOS社区维护。CentOS软件包…

作者头像 李华