如图。
大致思路:
理解题意,模拟过程,找到规律。
先找到最高的,那么左边就从左往右看,右边从右往左看。
AC代码:
class Solution {
public:
int trap(int A[], int n) {
if(n==0)
return 0;
if(n==1 || n==2)
return 0;
int highestIndex = 0;
int highest = 0;
for(int i=0;i<n;i++)
{
if(A[i]>highest)
{
highestIndex = i;
highest = A[i];
}
}
int sum=0;
int left=0; //左边最高的高度
for(int i=0;i<highestIndex;i++)
{
if(A[i]>left)
{
left=A[i];
continue;
}
sum+=left-A[i];
}
int right=0; //右边最高的高度
for(int i=n-1;i>highestIndex;i--)
{
if(A[i]>right)
{
right=A[i];
continue;
}
sum+=right-A[i];
}
return sum;
}
};