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,其实就是一行一行计算。
还有双指针方法和动态规划方法。

本文解析了如何使用单调栈算法来解决编程问题,通过实例说明如何在给定高度数组中计算可以接雨水的最大面积。通过对比和计算凹槽,实现动态地计算每行的接雨水容量。
493

被折叠的 条评论
为什么被折叠?



