【leetcode-84】 柱状图中最大的矩形

(1pass,比较简单的hard)

给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。

求在该柱状图中,能够勾勒出来的矩形的最大面积。

 

以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]

 

图中阴影部分为所能勾勒出的最大矩形面积,其面积为 10 个单位。

// 以每一柱为高向两边延伸
public class LargestRectangleArea {
    int max = 0;
    public int largestRectangleArea(int[] heights) {
        for (int i=0;i<heights.length;i++) {
            int height = heights[i];
            int left = i;
            int right = i;
            while(--left>=0) {
                if (heights[left] < heights[i]){
                    break;
                }
            }
            while(++right<=heights.length-1) {
                if (heights[right] < heights[i]){
                    break;
                }
            }
            int length = right - left - 1;
            if (max < length*height) {
                max = length*height;
            }
        }
        return max;

    }
}

 

posted @ 2019-03-27 14:43  twoheads  阅读(236)  评论(0编辑  收藏  举报