標籤:ide constrain out lse cas str 左右 ati 分享圖片
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.
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.
Example:
Input: [0,1,0,2,1,0,1,3,2,1,2,1]Output: 6
這個題目思路類似於木桶原理, 中間能收集到的水, 取決於左右兩邊較短的高度, 然後分別往中間走, 直到兩者相遇. 所以設定l, r, lh(left height), rh(right height), 判斷l,r指向的building
那個短就移動哪個, 比如l 指的更短, 那麼l+= 1, 然後如果新building比相應的left height要短, ans += left height - building[l], 否則 height = building[l], 如果r指的更短, 那麼
情況類似.
1. Constraints
1) empty, edge case, return 0
2) element will be >= 0 integer
2. Ideas
Two points: T:O(n) S: O(1)
3. Code
class Solution: def trapRainWater(self, heights): if not heights: return 0 l, r, ans = 0, len(heights) -1, 0 lh, rh = heights[l], heights[r] while l < r: if heights[l] <= heights[r]: l += 1 if heights[l] < lh: ans += lh - heights[l] else: lh = heights[l] else: r -= 1 if heights[r] < rh: ans += rh - heights[r] else: rh = heights[r] return ans
4. Test cases
1) empty
2) 1, 2, 3
3)
[0,1,0,2,1,0,1,3]
[LeetCode] 42. Trapping Rain Water_hard tag: Two Pointers