原题
https://leetcode.com/problems/trapping-rain-water/
解法
双指针法, 用l, r定义左边和右边的index, min_height作为目前bar的高度,只能是左右两边高度的较小值, 然后两个指针都往中间刷, 遇到高度小于min_height的index时, 将该index能接到的水加到结果里.
Time: O(n)
Space: O(1)
代码
class Solution:
def trap(self, height):
"""
:type height: List[int]
:rtype: int
"""
n = len(height)
l, r, ans, min_height = 0, n-1, 0, 0
while l < r:
while l < r and height[l] <= min_height:
ans += min_height - height[l]
l += 1
while l < r and height[r] <= min_height:
ans += min_height - height[r]
r -= 1
min_height = min(height[l], height[r])
return ans
本文介绍了一种解决LeetCode上'雨水陷阱'问题的有效算法——双指针法。通过定义左右指针及最小高度,该算法能在O(n)时间内,O(1)空间复杂度下,计算出由不同高度的bar组成的数组中可以接住多少雨水。文章详细解释了算法的运行逻辑,并提供了Python实现代码。
356

被折叠的 条评论
为什么被折叠?



