解法一:
class Solution {
public int trap(int[] height) {
if(height.length <= 1 ){
return 0;
}
int left = 0,right = 0;
for (int i = 0; i < height.length; i++) {
if(height[i] > height[left]){
left = i;
}
}
for (int i = 0; i < height.length; i++) {
if(height[i] > height[right] && i != left){
right = i;
}
}
if(left > right){
right = left + right;
left = right - left;
right = right - left;
}
return add(left,right,height)+leftsum(0,left,height)+rightsum(right,height.length-1,height);
}
public int leftsum(int left,int right,int[] height){
if(left+1 >= right){
return 0;
}
int index = 0;
for(int i = 0;i < right;i++){
if(height[index] < height[i]){
index = i;
}
}
return add(index,right,height)+leftsum(0,index,height);
}
public int rightsum(int left,int right,int[] height){
if(left+1 >= right){
return 0;
}
int index = left+1;
for(int i = left+1;i < height.length;i++){
if(height[index] < height[i]){
index = i;
}
}
return add(left,index,height)+rightsum(index,right,height);
}
public int add(int left,int right,int[] height){
if(left + 1 >= right){
return 0;
}
int min = Math.min(height[left],height[right]);
if(min == 0){
return 0;
}
int sum = 0;
for(int i = left + 1;i < right;i++){
sum += min - height[i];
}
return sum;
}
}
4/17/26About 2 min