42. Trapping Rain Water
Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it is able to trap after raining.
For example,
Given [0,1,0,2,1,0,1,3,2,1,2,1], return 6.

The above elevation map is represented by array [0,1,0,2,1,0,1,3,2,1,2,1]. In this case, 6 units of rain water (blue section) are being trapped.
Solution: Two Pointers
class Solution(object):
def trap(self, height):
"""
:type height: List[int]
:rtype: int
"""
rain = 0
low = 0
high = len(height) - 1
while low < high:
if height[low] < height[high]:
wall = height[low]
for idx in xrange(low + 1, high + 1):
if height[idx] >= wall:
low = idx
break
rain += wall - height[idx]
else:
wall = height[high]
for idx in xrange(high - 1, low - 1, -1):
if height[idx] >= wall:
high = idx
break
rain += wall - height[idx]
return rain
Lessons:
- Two pointers. Pick the pointer with smaller height.