//这道题属于栈的题目,需要判断入栈元素和栈内元素大小,构造一个非递减栈
//最巧妙的地方在于,扩大原数组容量,使得最后一个数据为0,以此来排除栈内剩余元素
//注意数组为空,数组为1的情况
class Solution {
public int largestRectangleArea(int[] heights) {Stack<Integer> stack =new Stack<Integer>();
int []height=new int[heights.length+1];
for(int i=0;i<heights.length;i++)
height[i]=heights[i];
height[heights.length]=0;
int res=0;
if(heights.length==0)
return 0;
if(heights.length==1)
return heights[0];
for(int i=0;i<height.length;i++){
if(stack.isEmpty()||height[stack.peek()]<=height[i])
{
stack.push(i);
}
else{
int count =stack.pop();
//i-stack.peek()-1中1是要把i自身的数据排除,不算在前一个之列
res=Math.max(res,height[count]*(stack.empty()?i:(i-stack.peek()-1)));--i;
}
}
return res;
}
}