题目描述
- 栈内元素单调递减
- 若当前柱子高度大于栈顶的柱子高度就能接到雨水,循环计算所接雨水的量
class Solution {
public int trap(int[] height) {
int ans=0;
Stack<Integer> stack=new Stack<Integer>();
for(int i=0;i<height.length;i++)
{
//如果栈不为空,且当前柱子高度大于栈顶记录的柱子高度
while(!stack.isEmpty()&&height[i]>=height[stack.peek()])
{
int bottomH=height[stack.pop()];//容器底部高度
if(stack.isEmpty())
break;
int l=stack.peek();
int h=Math.min(height[l], height[i])-bottomH;//雨水高度
ans+=h*(i-l-1);
}
stack.push(i);//将数组下标压入栈顶
}
return ans;
}
}
栈类
序号 | 方法描述 |
---|---|
1 | boolean empty() 测试堆栈是否为空。 |
2 | Object peek( ) 查看堆栈顶部的对象,但不从堆栈中移除它。 |
3 | Object pop( ) 移除堆栈顶部的对象,并作为此函数的值返回该对象。 |
4 | Object push(Object element) 把项压入堆栈顶部。 |
5 | int search(Object element) 返回对象在堆栈中的位置,以 1 为基数。 |