解题思路:
单调栈找出右边第一个更大的元素
当前元素为右边第一个更大的元素
栈顶元素为凹槽
栈顶元素的下一个元素(从栈顶往下第二个元素)为左边第一个更大的元素
使用sum累加得到的凹槽长x宽即可
class Solution {
public int trap(int[] height) {
int sum = 0;
Stack<Integer> stack = new Stack<>();
stack.push(0);
for (int i = 1; i < height.length; i++) {
if (height[i] <= height[stack.peek()]) {
stack.push(i);
} else {
while (!stack.isEmpty() && height[i] > height[stack.peek()]) {
int mid = stack.pop();
if (!stack.isEmpty()) {
int h = Math.min(height[i], height[stack.peek()]) - height[mid];
int w = i - stack.peek() - 1;
sum += h * w;
}
}
stack.push(i);
}
}
return sum;
}
}