class Solution {
public int trap(int[] height) {
int lens =height.length;
if(lens <= 2){
return 0;
}
Stack<Integer> stack = new Stack<>();
stack.push(0);
int sum = 0;
for(int i = 1; i < lens; i++){
if(height[i] < height[stack.peek()]){
stack.push(i);
}else if(height[i] == height[stack.peek()]){
stack.pop();
stack.push(i);
}else{
while(!stack.isEmpty() && height[i] > height[stack.peek()]){
int mid = stack.pop();
if(!stack.isEmpty()){
int left = stack.peek();
int h = Math.min(height[i], height[left]) - height[mid];
int w = i - left - 1;
int hw = h * w;
sum += hw;
}
}
stack.push(i);
}
}
return sum;
}
}