2024-09-01
算法刷题
00

目录

1 巧妙的思路
2 如何理解
3 动态规划

1 巧妙的思路

看到了一个巧妙的思路:

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

在这里插入图片描述

在这里插入图片描述

2 如何理解

将循环中这句话ans = ans + h1 + h2 -height[i]分开理解,对于所有的遍历过程中的所有h1 ,当h1 小于最大值,就会减去height[i] ,这样就得到了左边的雨水+ 右边整个面积。下图的红色表示了最终的数值。

在这里插入图片描述

对于所有的遍历过程中的所有h2 ,当h2 小于等于最大值,就会减去height[i] ,这样就得到了右边的雨水+ 左边整个面积。下图的橘色表示了最终的数值。

在这里插入图片描述

将上面的2个面积加起来,会得到 所有的雨水+ len(height)*h1

我真是服了。

3 动态规划

动态规划没这个思路简单。不写了。

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Dong

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!