首页 > 其他 > 详细

84. Largest Rectangle in Histogram

时间:2017-02-03 10:52:26      阅读:144      评论:0      收藏:0      [点我收藏+]

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.

 

For example,
Given heights = [2,1,5,6,2,3],
return 10.

此题需要注意数组overflow情况,即新创建的数组的最后一个元素一定要为0!代码如下:

public class Solution {

    public int largestRectangleArea(int[] heights) {

        int max = 0;

        if(heights.length==0) return max;

        int[] h = new int[heights.length+1];

        for(int i=0;i<heights.length;i++){

            h[i] = heights[i];

        }

        Stack<Integer> s =new Stack<Integer>();

        for(int i=0;i<h.length;i++){

            if(s.isEmpty()||h[s.peek()]<=h[i]){

                s.push(i);

            }else{

                while(!s.isEmpty()&&h[s.peek()]>h[i]){

                    int top= s.pop();

                    int area = h[top]*(s.isEmpty()?i:i-s.peek()-1);

                    max = Math.max(max,area);

                }

                s.push(i);

            }

        }

        return max;

    }

}

84. Largest Rectangle in Histogram

原文:http://www.cnblogs.com/codeskiller/p/6362002.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!