classSolution{intlargestRectangleArea(int[] heights){Stack<Integer> st =newStack<Integer>();// 数组扩容,在头和尾各加入一个元素int[] newHeights =newint[heights.length +2];
newHeights[0]=0;
newHeights[newHeights.length -1]=0;for(int index =0; index < heights.length; index++){
newHeights[index +1]= heights[index];}
heights = newHeights;
st.push(0);int result =0;for(int i =1; i < heights.length; i++){if(heights[i]> heights[st.peek()]){
st.push(i);}elseif(heights[i]== heights[st.peek()]){
st.pop();
st.push(i);}else{while(heights[i]< heights[st.peek()]){int mid = st.peek();
st.pop();int left = st.peek();int right = i;int w = right - left -1;int h = heights[mid];
result =Math.max(result, w * h);}
st.push(i);}}return result;}}