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], return6.
class Solution {
public:
int trap(int A[], int n) {
int secHight = 0;
int left = 0;
int right = n-1;
int area = 0;
while (left < right){
if (A[left] < A[right]){
secHight = max(A[left], secHight);
area += secHight-A[left];//计算当前格的能装雨水的容量
left++;
} else {
secHight = max(A[right], secHight);
area += secHight-A[right];
right--;
}
}
return area;
}
};
/*同样这种思路,只是分开写了
int trap(int A[], int n) {
//找到最高的对应的下标
int highestIndex=0;
for(int i=0;i<n;i++)
{
if(A[highestIndex]<A[i])
highestIndex=i;
}
//计算最高的左边可容纳的水
int left=0;
int sumWater=0;
for(int i=0;i<highestIndex;i++)
{
if(left<A[i])
left=A[i];
else
{
sumWater+=(left-A[i]);
}
}
//计算最高的右边可容纳的水
int right=0;
for(int i=n-1;i>highestIndex;i--)
{
if(right<A[i])
right=A[i];
else
{
sumWater+=(right-A[i]);
}
}
return sumWater;
}
*/