1,先寻找最高点
2,左右两边分别向最高点遍历
3,两值相加
public int trap(int[] height) {
if(height.length == 0)return 0;
if(height.length == 1) return 0;
int max = height[0];
int maxindex = 0;
int res = 0;
for(int i = 1 ; i < height.length ; i++)
{
if(max <= height[i])
{
max = height[i];
maxindex = i ;
}
}
int l1 = 0 ;
int l2 = 0;
int r = height.length -1;
int index = 0;
int totol = 0;
while(l2 < maxindex )
{
totol = 0;
while(l2 < maxindex&&height[l1] >= height[l2])
{
l2++;
}
for(int i = l1+1; i < l2 ; i++)
{
totol += height[i];
}
//System.out.println(totol);
res += (Math.min(height[l1] ,height[l2]) * (l2 - l1 -1) -totol) ;
l1 = l2;
l2 = l2+1;
}
l1 = height.length -1;
l2 = l1;
while(l2 > maxindex)
{
totol = 0;
while(l2 > maxindex&&height[l1] >= height[l2])
{
l2--;
}
for(int i = l1-1; i > l2 ; i--)
{
totol += height[i];
}
res += (Math.min(height[l1] ,height[l2]) * (l1 - l2 -1) -totol) ;
l1 = l2;
l2 = l2-1;
}
return res;
}