练习本 · 每日一题

每日一题

支持 C、JavaScript 和 Python。读完题目,在右侧写代码,再交给测试用例检查。

娘化白头海雕女孩在月光桌前思考算法问题
月光算法 · 小鹰手记

接雨水

困难
数组双指针动态规划单调栈

来源:LeetCode

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

**输入格式:**
第一行:n(柱子个数)
第二行:n 个非负整数,表示每个柱子的高度

**输出格式:** 能接的雨水总量

📋 示例

示例 1由左到右柱高 [0,1,0,2,1,0,1,3,2,1,2,1],可接 6 个单位雨水
输入:12 0 1 0 2 1 0 1 3 2 1 2 1
输出:6
示例 2
输入:6 4 2 0 3 2 5
输出:9

🧪 测试用例 (5 个)

#输入期望输出说明
112 ⏎ 0 1 0 2 1 0 1 3 2 1 2 16经典用例
26 ⏎ 4 2 0 3 2 59中等用例
33 ⏎ 1 2 30递增,接不到水
43 ⏎ 3 2 10递减,接不到水
55 ⏎ 5 0 5 0 510山谷形
💡 提示 (3 条)

双指针法:左右各一个指针,维护左右最大高度,移动较短的那边

每个位置能接的水 = min(左边最大高度, 右边最大高度) - 当前高度

也可以预处理 leftMax 和 rightMax 数组

你的代码在当前浏览器暂存
语言