73.Largest Rectangle in Histogram (maximum rectangle)

Level:

  Hard

Subject description:

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.

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

img
The largest rectangle is shown in the shaded area, which has area = 10 unit.

Example:

Input: [2,1,5,6,2,3]
Output: 10

Analysis of ideas:

  Each a height [i], both as a rectangle the height of the lowest point, extend to both sides, left and right than it is to find small, stop, calculate the area, and finally find out the maximum value obtained in the area of. The time complexity is O (n).

Code:

public class Solution{
    public int largestRectangleArea(int []heights){
        if(heights==null||heights.length==0)
            return 0;
        Stack<Integer>s=new Stack<>(); //存放的是数组的下标
        int maxarea=0;
        for(int i=0;i<=heights;i++){
            int h=(i==heights.length)?0:height[i]; //最后添加一个零是为了让栈中最后一个元素能弹出
            if(s.isEmpty()||h>=heights[s.peek()]){ //能保证height[i]左边都比其小
                s.push(i);
                
            }else{
                int tp=s.pop();
                maxarea=Math.max(maxarea,heights[tp]*(s.isEmpty()?i:i-s.peek()-1));
                i--;
            }
        }
        return maxarea;
    }
}

Guess you like

Origin www.cnblogs.com/yjxyy/p/11098533.html