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 =
The largest rectangle is shown in the shaded area, which has area =
Given heights =
return
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
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 =
10unit.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
相关文章推荐
- Leetcode | Largest Rectangle in Histogram
- LeetCode--Largest Rectangle in Histogram
- LeetCode - Largest Rectangle in Histogram 题解
- LeetCode Largest Rectangle in Histogram(栈的使用)
- 【LeetCode】Largest Rectangle in Histogram
- [Leetcode] Largest Rectangle in Histogram (Java)
- [Leetcode] Largest Rectangle in Histogram
- leetcode || 84、Largest Rectangle in Histogram
- leetcode - Largest Rectangle in Histogram
- leetcode_question_84 Largest Rectangle in Histogram
- [leetcode] Largest Rectangle in Histogram
- leetcode之Largest Rectangle in Histogram
- [Leetcode] largest rectangle in histogram 直方图中最大的矩形
- LeetCode 题目答案 Largest Rectangle in Histogram 极品解法的解释
- Largest Rectangle in Histogram--LeetCode
- leetcode第一刷_Largest Rectangle in Histogram
- [LeetCode]—Largest Rectangle in Histogram 求直方图最大填充矩形面积
- leetcode-Largest Rectangle in Histogram
- leetcode 84 Largest Rectangle in Histogram
- [leetcode]Largest Rectangle in Histogram