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.
Two Pointer
这种做法很难想到,感觉有点贪心的味道。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| public int trap(int[] heights) { if (heights == null || heights.length == 0) return 0; int left = 0, right = heights.length - 1; int ans = 0; int maxLeft = 0, maxRight = 0; while (left < right) { if (heights[left] <= heights[right]) { if (heights[left] > maxLeft) maxLeft = heights[left]; else ans += maxLeft - heights[left]; left++; } else { if (heights[right] > maxRight) maxRight = heights[right]; else ans += maxRight - heights[right]; right--; } } return ans; }
|