调试中...
调试中...
题目描述
题目描述
题解
题解
提交记录
提交记录
代码
代码
测试用例
测试用例
测试结果
测试结果
困难
相关标签
相关企业
提示

给定一个直方图(也称柱状图),假设有人从上面源源不断地倒水,最后直方图能存多少水量?直方图的宽度为 1。

上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的直方图,在这种情况下,可以接 6 个单位的水(蓝色部分表示水)。 感谢 Marcos 贡献此图。

示例:

输入:[0,1,0,2,1,0,1,3,2,1,2,1]
输出:6
通过次数
53.1K
提交次数
83.5K
通过率
63.6%


相关企业

提示 1
直方图中最高的长方形起什么作用?

提示 2
想象一下最高的长方形、左边第二高的长方形和右边第二高的长方形。水会填满它们之间的区域。你能计算出其面积吗?其余的面积怎么办?

提示 3
为了计算出整体上最高的长方形和左侧最高的长方形之间的面积,你只需遍历直方图并减去这两个长方形之间的任何长方形的面积。你可以在右侧做同样的事情。如何处理剩下的图表?

提示 4
你可以通过重复这个过程来处理图的其余部分:找到最高的长方形和第二高的长方形,然后减去它们之间的长方形的面积。

提示 5
怎样才能更快地找到两边的下一个最高的长方形?

提示 6
你能通过预计算来得出每边下一个最高的长方形是哪个么?

提示 7
作为另一种解决方案,请从每个长方形的角度来考虑。每个长方形上面都有水。每个长方形上面会有多少水?

提示 8
每个长方形的顶部都有水,水的高度应与左侧最高长方形和右侧最高长方形的较小值相匹配,也就是说,water_on_top[i] = min(tallest_ bar(0->i), tallest_bar(i, n))。

提示 9
你应该能在O(N)时间和O(N)空间中解出该题。

评论 (0)

《程序员面试金典(第 6 版)》独家授权
本书是原谷歌资深面试官的经验之作,帮助了许多想要加入脸书、苹果、谷歌等 IT 名企的求职者拿到 Dream offer。本专题的 100+ 编程面试题是在原书基础上精心挑选出来的,帮助你轻松应战 IT 名企技术面试。
© 2025 领扣网络(上海)有限公司
0 人在线
行 1,列 1
运行和提交代码需要登录
height =
[0,1,0,2,1,0,1,3,2,1,2,1]
Source