看到了一个巧妙的思路:
python3
pythonclass Solution:
def trap(self, height: List[int]) -> int:
ans = 0
h1 = 0
h2 = 0
for i in range(len(height)):
h1 = max(h1,height[i])
h2 = max(h2,height[-i-1])
ans = ans + h1 + h2 -height[i]
return ans - len(height)*h1
将循环中这句话ans = ans + h1 + h2 -height[i]
分开理解,对于所有的遍历过程中的所有h1
,当h1
小于最大值,就会减去height[i]
,这样就得到了左边的雨水+ 右边整个面积。下图的红色表示了最终的数值。
对于所有的遍历过程中的所有h2
,当h2
小于等于最大值,就会减去height[i]
,这样就得到了右边的雨水+ 左边整个面积。下图的橘色表示了最终的数值。
将上面的2个面积加起来,会得到 所有的雨水+ len(height)*h1
。
我真是服了。
动态规划没这个思路简单。不写了。
本文作者:Dong
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!