东寻

导航

leetcode| 84. 柱状图中最大的矩形

##给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。 ![](https://img2018.cnblogs.com/blog/1805130/202002/1805130-20200212154827325-1450873595.png) 以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]。 ![](https://img2018.cnblogs.com/blog/1805130/202002/1805130-20200212155256180-616019814.png) 图中阴影部分为所能勾勒出的最大矩形面积,其面积为 10 个单位。

示例:
输入: [2,1,5,6,2,3]
输出: 10

思路

分治法:maxArea = max(当前区间minHeight*区间长度, max(minIndex左侧区间子问题, minIndex右侧区间子问题))
时间复杂度O(nlgn),最坏O(n²),空间复杂度O(n)。

代码

class Solution {
    public int calcArea(int[] heights, int start, int end) {
		if(end < start) return 0;
		int minIndex = start;
		int minHeight = heights[start];
		for(int i = start+1; i <= end; i++) {
			if(heights[i] < minHeight) {
				minHeight = heights[i];
				minIndex = i;
			}
		}
		return Math.max(minHeight*(end-start+1), Math.max(calcArea(heights,start,minIndex-1),calcArea(heights,minIndex+1,end)));
	}
	
    public int largestRectangleArea(int[] heights) {
        return calcArea(heights, 0, heights.length-1);
    }
}

笔记

存在栈方法,时间复杂度O(n),空间复杂度O(n)。

链接:https://leetcode-cn.com/problems/largest-rectangle-in-histogram

posted on 2020-02-12 16:03  东寻  阅读(180)  评论(0编辑  收藏  举报