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
.
package leetCode; import java.util.Stack; /** * Created by lxw, liwei4939@126.com on 2018/3/12. */ public class L084_Largest_Rectangle_Histogram { public int largestRectangleArea(int[] height){ if (height == null || height.length == 0){ return 0; } int maxArea = 0; Stack<Integer> stack = new Stack<>(); for (int i = 0; i < height.length; i++){ while (!stack.empty() && height[i] <= height[stack.peek()]){ int j = stack.pop(); int k = stack.isEmpty() ? -1 : stack.peek(); int curArea = (i - k- 1) * height[j]; maxArea = Math.max(maxArea,curArea); } stack.push(i); } while (!stack.empty()){ int j = stack.pop(); int k = stack.isEmpty() ? -1 : stack.peek(); int curArea = (height.length - k -1)*height[j]; maxArea = Math.max(curArea, maxArea); } return maxArea; } }
《程序员代码面试指南》26页 求最大子矩阵的大小对此题进行了讲述,另外可以参考的链接有:
http://www.geeksforgeeks.org/largest-rectangle-under-histogram/
https://www.youtube.com/watch?v=VNbkzsnllsU