news 2026/4/16 11:14:43

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/14 12:33:12

Windows远程桌面多用户连接终极指南:RDP Wrapper完全解锁方案

Windows远程桌面多用户连接终极指南&#xff1a;RDP Wrapper完全解锁方案 【免费下载链接】rdpwrap RDP Wrapper Library 项目地址: https://gitcode.com/gh_mirrors/rd/rdpwrap 还在为Windows系统仅支持单用户远程连接而烦恼&#xff1f;想要在不升级专业版的情况下实现…

作者头像 李华
网站建设 2026/4/16 10:22:06

魔盒项目开发纪实:ESP-IDF固件开发起步

魔盒固件开发①&#xff1a;准备日期&#xff1a;2025-12-15 目标&#xff1a;把官方 hello_world 工程改造成"魔盒"固件骨架&#xff0c;今天先完成环境验证与基础配置。一、开发环境一览项目版本 / 来源操作系统MAC OSVS Code1.107ESP-IDF 插件v1.10.2&#xff08;…

作者头像 李华
网站建设 2026/4/16 10:22:02

DOCX.js:纯前端JavaScript实现Word文档生成的神器

DOCX.js&#xff1a;纯前端JavaScript实现Word文档生成的神器 【免费下载链接】DOCX.js Generate Microsoft Word DOCX files in pure client-side JavaScript. Try in Chrome 项目地址: https://gitcode.com/gh_mirrors/do/DOCX.js DOCX.js是一个专为浏览器环境设计的开…

作者头像 李华
网站建设 2026/4/16 10:22:00

5大实战技巧!ColorUI选项卡组件助你打造高效移动端导航

5大实战技巧&#xff01;ColorUI选项卡组件助你打造高效移动端导航 【免费下载链接】coloruicss 鲜亮的高饱和色彩&#xff0c;专注视觉的小程序组件库 项目地址: https://gitcode.com/gh_mirrors/co/coloruicss ColorUI是一款专注于小程序开发的组件库&#xff0c;其选…

作者头像 李华
网站建设 2026/4/10 9:30:58

【建议收藏】产品经理不可不知的AI大模型核心知识指南

文章系统介绍了产品经理需掌握的AI大模型核心能力&#xff0c;包括结构化输出、工具调用(Function Calling与MCP)、多模态交互、模型微调与RAG技术及对话接口使用。同时分析了AI幻觉问题及主流大模型特点与适用场景&#xff0c;强调产品经理应理解AI能力边界&#xff0c;善用工…

作者头像 李华