84. Largest Rectangle in Histogram

来源:互联网 发布:mac怎么全屏预览图片 编辑:程序博客网 时间:2024/05/05 14:57

题目:
Given n non-negative integers representing the histogram’s bar height where the width of each bar is 1, find the area of largest rectangle in the histogram.

直方图
Above is a histogram where width of each bar is 1, given height = [2,1,5,6,2,3].

The largest rectangle is shown in the shaded area, which has area = 10 unit.
找直方图中面积最大的矩形框,求面积。

思路:从左到右处理直方图

public class Solution {    public int largestRectangleArea(int[] heights) {        //栈存储递增的直方图的下标         Deque<Integer> stack = new LinkedList<Integer>();         int result=0;         int i=0;         while (i<heights.length) {         //每次比较栈顶与当前位置的元素大小,若当前值大于栈顶元素,入栈;         //栈为空,入栈            if(stack.isEmpty() || heights[i]>heights[stack.peekFirst()])                stack.addFirst(i++);            else {            //当前值小于栈顶元素,合并现有栈,直到栈顶元素小于当前元素值                int tmp = stack.removeFirst();                result= Math.max(result, heights[tmp]*(stack.isEmpty() ? i : (i-stack.peekFirst()-1)));            }        }        //处理未出栈的元素         while(!stack.isEmpty())         {             int tmp = stack.removeFirst();             result = Math.max(result, heights[tmp]*(stack.isEmpty() ? heights.length : (heights.length-stack.peekFirst()-1)));         }         return result;    }}
0 0
原创粉丝点击