Leetcode Trapping Rain Water
2014-09-20 13:16
357 查看
题目:
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!
解题:
设置两个指针从两边往中间走,每次把min(A[left], A[right])作为下界墙,以left, right为两边计算当前层的总面积,迭代下一层。
最后将算起来的总面积减去黑块的面积。
class Solution {
public:
int trap(int A[], int n) {
if(!n) return 0;
area = tot = 0;
int le = 0, ri = n - 1;
for(;le < n && !A[le]; le ++);
for(;ri >= le && !A[ri]; ri --);
for(int i = le; i <= ri; i ++)
tot += A[i];
gao(A, 0, n - 1, 0);
return area - tot;
}
void gao(int A[], int le, int ri, int pre) {
while(A[le] <= pre && le < ri) le ++;
while(A[ri] <= pre && le < ri) ri --;
if(le == ri) {
tot -= A[le] - pre;
return ;
}
area += (min(A[le], A[ri]) - pre) * (ri - le + 1);
gao(A, le, ri, min(A[le], A[ri]));
return ;
}
private:
int area, tot;
};
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. Thanks Marcos for contributing this image!
解题:
设置两个指针从两边往中间走,每次把min(A[left], A[right])作为下界墙,以left, right为两边计算当前层的总面积,迭代下一层。
最后将算起来的总面积减去黑块的面积。
class Solution {
public:
int trap(int A[], int n) {
if(!n) return 0;
area = tot = 0;
int le = 0, ri = n - 1;
for(;le < n && !A[le]; le ++);
for(;ri >= le && !A[ri]; ri --);
for(int i = le; i <= ri; i ++)
tot += A[i];
gao(A, 0, n - 1, 0);
return area - tot;
}
void gao(int A[], int le, int ri, int pre) {
while(A[le] <= pre && le < ri) le ++;
while(A[ri] <= pre && le < ri) ri --;
if(le == ri) {
tot -= A[le] - pre;
return ;
}
area += (min(A[le], A[ri]) - pre) * (ri - le + 1);
gao(A, le, ri, min(A[le], A[ri]));
return ;
}
private:
int area, tot;
};
相关文章推荐
- Leetcode Trapping Rain Water
- Leetcode之Trapping Rain Water
- LeetCode(42)Trapping Rain Water
- Leetcode Trapping Rain Water
- leetcode--trapping_rain_water
- [leetcode] 42 Trapping Rain Water
- [Leetcode]Trapping Rain Water
- LeetCode——Trapping Rain Water
- Leetcode刷题记——Trapping Rain Water(捕获雨水)
- [leetcode] Trapping Rain Water
- [*leetcode 42] Trapping Rain Water
- LeetCode 42 Trapping Rain Water
- [LeetCode] Trapping Rain Water
- [LeetCode][JavaScript]Trapping Rain Water
- [leetcode-42]Trapping Rain Water(java)
- [leetcode] Trapping Rain Water
- leetcode 刷题之路 51 Trapping Rain Water
- 【LeetCode】Trapping Rain Water
- [Leetcode] Trapping Rain Water
- [Leetcode] Trapping Rain Water