最近碰到有同学跟我说,碰到一个节水的面试题,还是挺有意思的。
接雨水问题是一个经典的算法问题,给定一个非负整数数组表示的高度图,计算这个高度图能接多少雨水。
如下就采用最简单的双指针法,来实现这个逻辑:
def trap_water(this_height):
if not this_height:
return 0
left, right = 0, len(this_height) - 1
left_max, right_max = this_height[left], this_height[right]
water = 0
while left < right:
if this_height[left] < this_height[right]:
left += 1
left_max = max(left_max, this_height[left])
water += left_max - this_height[left]
else:
right -= 1
right_max = max(right_max, this_height[right])
water += right_max - this_height[right]
return water
if __name__ == "__main__":
# 测试
height = [2, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 3]
print(trap_water(height))
验证了一下,没有问题。
搞定。