您的位置:首页 > 其它

LeetCode力扣之Largest Rectangle in Histogram

2018-03-12 15:29 459 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: