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
.
思路:先找出最大的数字(这个思路我怎么没想到呢,思路其实也很简单。。。。)
代码:
int trap(int A[], int n)
{
if(n<3 || A==NULL)
{
return 0;
}
int maxIndex=0;
for(int i=0; i<n; ++i)
{
if(A[i]>A[maxIndex])
{
maxIndex=i;
}
}
int countTrap=0;
int leftMax=A[0];
for(int i=0; i<maxIndex; ++i)
{
if(A[i] < leftMax)
{
countTrap+=leftMax-A[i];
}
else
{
leftMax=A[i];
}
}
int rightMax=A[n-1];
for(int j=0; j>maxIndex; --j)
{
if(A[j] < rightMax)
{
countTrap+=rightMax-A[j];
}
else
{
rightMax=A[j];
}
}
return countTrap;
}