看到了一个巧妙的思路:
python3
python展开代码class 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 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!