【题目描述】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.
【解题思路】坐标的最大左右边相减就是该坐标点容积
- 从左到右扫描,找出每个坐标的最大左值
- 从右到左扫描,找出每个坐标最大右值
- 累加每个容积。
【考查内容】数组
class Solution {
public:
int trap(int A[], int n) {
if(n<2)
return 0;
int *maxL = new int[n], *maxR = new int[n];
int maxLR = A[0];
maxL[0] = 0;
//from left to right cal max lvalue
for(int i=1; i<n-1; i++){
maxL[i] = maxLR;
if(A[i]>maxLR)
maxLR = A[i];
}
maxLR = A[n-1];
maxR[n-1] = 0;
int ttrap = 0, ctrap = 0;
for(int i=n-2; i>0;i--){
maxR[i] = maxLR;
ctrap = min(maxL[i], maxR[i]) - A[i];
if(ctrap>0)
ttrap+= ctrap;
if(maxLR < A[i])
maxLR = A[i];
}
delete maxL, maxR;
return ttrap;
}
};