class Solution {
public int trap(int[] height) {
Deque<Integer> st = new LinkedList<>();
st.addLast(0);
int res = 0;
for(int i = 1;i < height.length;i++){
while(st.size() > 0 && height[st.peekLast()] < height[i]){
int mid = st.pollLast();
if(!st.isEmpty()){
int left = st.peekLast();
int h = Math.min(height[left],height[i]) - height[mid];
int w = i - left - 1;
res += h * w;
}
}
st.addLast(i);
}
return res;
}
}
单调栈方法:当出现第i个元素大于栈顶时,就出现了凹槽,将前一个元素取出,计算h和w,其实就是一行一行计算。
还有双指针方法和动态规划方法。