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

LeetCode 42. Trapping Rain Water 题解

LeetCode 42. Trapping Rain Water 题解

题目描述

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

示例 1:

输入:height = [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。

示例 2:

输入:height = [4,2,0,3,2,5] 输出:9

解题思路

方法一:双指针

  • 每个位置能接的雨水 = min(左边最高, 右边最高) - 当前高度
  • 使用双指针从两端向中间移动

方法二:单调栈

  • 使用单调递减栈
  • 当遇到更高的柱子时,计算可以接的雨水

代码实现

方法一:双指针

def trap(height): if not height: return 0 left, right = 0, len(height) - 1 left_max, right_max = 0, 0 water = 0 while left < right: if height[left] < height[right]: if height[left] >= left_max: left_max = height[left] else: water += left_max - height[left] left += 1 else: if height[right] >= right_max: right_max = height[right] else: water += right_max - height[right] right -= 1 return water

方法二:单调栈

def trap(height): water = 0 stack = [] # 单调递减栈 for i, h in enumerate(height): while stack and height[stack[-1]] < h: top = stack.pop() if not stack: break # 计算雨水 distance = i - stack[-1] - 1 bounded_height = min(height[stack[-1]], h) - height[top] water += distance * bounded_height stack.append(i) return water

复杂度分析

方法时间复杂度空间复杂度
双指针O(n)O(1)
单调栈O(n)O(n)

总结

本题是接雨水问题的经典解法。

关键点:

  • 双指针:从两端向中间,维护左右最大高度
  • 单调栈:计算凹槽中的雨水量
  • 双指针空间更优
http://www.cnnetsun.cn/news/1538027.html

相关文章:

  • 终极指南:使用CXPatcher在Mac上完美运行Windows游戏的完整教程
  • STM32F103C8T6外接MCP4725 DAC模块,I2C地址配置错了?实测输出电压只有一半的排查与修复
  • Linux下PCIe AER错误排查实战:从寄存器解析到故障定位
  • 从“纸上谈兵”到“身体力行”:具身智能(Embodied AI)的演进逻辑、技术挑战与产业落地
  • 保姆级教程:用YOLOv5s搞定双缺口滑块验证码(从标注到部署避坑指南)
  • 保姆级教程:在Ubuntu 20.04上搞定pybind11编译与Python调用C++库
  • CSDN 去水印打印神器 | 一键展开代码 + 清除水印 + 自动打印,完美保存技术文章!
  • QML 文本控件实战:Text、TextInput、TextEdit 的样式定制与交互优化
  • TradingAgents-CN终极教程:10分钟搭建你的AI股票投资分析系统
  • 深入解析C语言中的Stream(流)操作与文件处理实践
  • 手把手教你处理Android 11+的‘特殊权限’:从MANAGE_EXTERNAL_STORAGE申请到结果监听全流程
  • 李慕婉-仙逆-造相Z-Turbo与Unity引擎:实时3D场景概念图生成插件开发
  • AI专著写作权威指南:优质工具推荐,让你的学术之路更平坦
  • 【CP AUTOSAR】Wdg驱动与GPT定时器协同:实现精准看门狗管理的实战解析
  • 数字图像处理(十)腐蚀和膨胀:从原理到实战应用
  • Linux性能调优实战:5个perf命令的高效用法(附火焰图生成指南)
  • 保姆级教程:在Ubuntu 22.04上,用Xinference为你的RAGFLOW项目接入BGE重排序模型
  • 告别“手搓论文”焦虑:百考通AI期刊写作全流程通关秘籍
  • Qwen3.5-4B模型Qt桌面应用开发:集成AI对话功能
  • 3分钟终极解决方案:快速解除Cursor试用限制的完整指南
  • 200K上下文实测|【书生·浦语】internlm2-chat-1.8b长文本理解效果震撼展示
  • 为什么StyTr²能超越CNN?深入解析CAPE位置编码在风格迁移中的黑科技
  • 深入解析C#中SugarColumn在ORM映射中的高效应用
  • Qwen Pixel Art惊艳效果展示:16色限制下的精准色彩映射与抖动算法效果
  • 异常检测实战:局部异常因子(LOF)在金融风控中的应用
  • Phi-3-mini-128k-instruct在算法学习中的应用:动态规划与贪心算法例题讲解
  • 别再只会用Ettercap了!手把手教你用Python+Scapy从零写一个ARP欺骗脚本(附完整代码)
  • JavaScript基础课程三十、微信小程序实战
  • springboot-vue+nodejs的药膳食谱管理系统
  • FreeSWITCH外线对接避坑指南:IAD网关配置中5个必改的安全参数