84-Larges-Rectangle-in-Histogram
Last updated
Last updated
class Solution {
public int largestRectangleArea(int[] heights) {
if(heights==null || heights.length==0){
return 0;
}
int result=0;
LinkedList<Integer> stack=new LinkedList<>();
int[] back=new int[heights.length+2];
for(int i=0;i<heights.length;i++){
back[i+1]=heights[i];
}
for(int i=0;i<back.length;i++){
//这里并不要求栈内元素严格单调自增,元素相等也可以,因为这不影响最后面积的计算
while(!stack.isEmpty() && back[stack.peekLast()]>=back[i]){
int curHeight=back[stack.pollLast()];
int width=i-stack.peekLast()-1;
result=Math.max(result,curHeight*width);
}
stack.offer(i);
}
return result;
}
}