给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水
public static int trap(int[] height){
Stack<Integer> st = new Stack<Integer>();
int i = 0, ans = 0;
while (i < height.length){
while(!st.empty() && height[i] > height[st.peek()]){
int top = st.pop();
if(st.empty()) {
break;
}
// 当前元素的下标减去栈顶元素的下标 得长度
int distance = i - st.peek() -1;
// 比较左右两边高度
int boundedHeight = Math.min(height[i],height[st.peek()]) - height[top];
ans += distance * boundedHeight;
}
st.push(i++);
}
return ans;
}