[Leetcode] Trapping Rain Water
2014-12-06 22:06
399 查看
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
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. Thanks Marcos for contributing this image!
在上述结构中,在两片栅栏间 装水的多少取决于
1.独立的容器,那么取决于最短的那块木板。
2.非独立的容器,即被包在更大的容器中,那么装水的多少取决于更大的容器。
按照以上思路 我们只有从两边向中间靠拢,才可以获得最优解法。
从两边往中间,每次选取最短的木板向中间遍历,就能保证每片低于边界的地方 水都是可以被保存的。
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. Thanks Marcos for contributing this image!
在上述结构中,在两片栅栏间 装水的多少取决于
1.独立的容器,那么取决于最短的那块木板。
2.非独立的容器,即被包在更大的容器中,那么装水的多少取决于更大的容器。
按照以上思路 我们只有从两边向中间靠拢,才可以获得最优解法。
从两边往中间,每次选取最短的木板向中间遍历,就能保证每片低于边界的地方 水都是可以被保存的。
class Solution { public: int trap(int A[], int n) { int i = 0, j = n - 1, res = 0, cur; int *a = A; while (i < j) { if (a[i] < a[j]) { cur = i+1; while (cur <= j && a[cur] <= a[i]) res += a[i] - a[cur++]; i = cur; } else { cur = j - 1; while (cur >= i && a[cur] <= a[j]) res += a[j] - a[cur--]; j = cur; } } return res; } };
相关文章推荐
- [leetcode刷题系列]Trapping Rain Water
- LeetCode 42 Trapping Rain Water
- leetcode Trapping Rain Water pthon
- 【leetcode】Trapping Rain Water
- LeetCode--trapping-rain-water
- Leetcode42 Trapping Rain Water
- leetcode question 42: Trapping Rain Water
- Leetcode—— trapping-rain-water
- Java for LeetCode 042 Trapping Rain Water
- LeetCode——Trapping Rain Water
- Leetcode: Trapping Rain Water II
- Trapping Rain Water (Bar Height) -- LeetCode
- leetcode 407. Trapping Rain Water II
- [LeetCode] Trapping Rain Water
- [Leetcode 42] Trapping Rain Water
- 【leetcode】Array——Trapping Rain Water(42)
- leetcode-042:Trapping Rain Water
- [LeetCode]Trapping Rain Water
- [LeetCode] 118: Trapping Rain Water
- 【leetcode】Trapping Rain Water