LeetCode42. 接雨水
public static int trap(int[] height) {
int[] right = new int[height.length];
int[] left = new int[height.length];
Deque<int[]> deque = new ArrayDeque<>();
deque.push(new int[] {height[0],0});
for(int i=1;i<height.length;i++) {
if(height[i]>deque.peek()[0]) {
while(!deque.isEmpty()&&height[i]>deque.peek()[0]) {
int[] temp = deque.pop();
right[temp[1]]=height[i];
}
}
deque.push(new int[] {height[i],i});
System.out.println(deque);
}
for(int i=0;i<height.length;i++) {
System.out.print(" "+right[i]);
}
deque.clear();
deque.push(new int[] {height[height.length-1],height.length-1});
for(int i=height.length-2;i>=0;i--) {
if(!deque.isEmpty()&&height[i]>deque.peek()[0]) {
while(!deque.isEmpty()&&height[i]>deque.peek()[0]) {
int[] temp = deque.pop();
left[temp[1]]=height[i];
}
}
deque.push(new int[] {height[i],i});
}
System.out.println();
for(int i=0;i<height.length;i++) {
System.out.print(" "+left[i]);
}
int sum=0;
for(int i=1;i<height.length-1;i++) {
if(right[i]!=0&&left[i]!=0) {
sum+=Math.min(right[i], left[i])-height[i];
}
}
return sum;
}