方法一:顺序遍历
class Solution {
public int trap(int[] height) {
if(height==null||height.length<3){
return 0;
}
int count=0;
for(int i=1;i<height.length-1;i++){
int maxLeft=0;
for(int j=i-1;j>0;j--){
if(height[j]>height[maxLeft]){
maxLeft=j;
}
}
int maxRight=height.length-1;
for(int k=i+1;k<height.length-1;k++){
if(height[k]>height[maxRight]){
maxRight=k;
}
}
int finall=Math.min(height[maxLeft],height[maxRight]);
if(height[i]<finall){
count+=finall-height[i];
}
}
return count;
}
}
方法二:双指针方法
class Solution {
public int trap(int[] height) {
if(height==null||height.length==0){
return 0;
}
int sum=0;
int left=0;
int right=height.length-1;
int maxleft=height[left];
int maxright=height[right];
while(left<right){
if(maxleft<maxright){
if(maxleft>height[left+1]){
sum+=maxleft-height[left+1];
}else{
maxleft=height[left+1];
}
left++;
}else{
if(maxright>height[right-1]){
sum+=maxright-height[right-1];
}else{
maxright=height[right-1];
}
right--;
}
}
return sum;
}
}