[LeetCode] Largest Rectangle in Histogram
2014-08-27 16:55
155 查看
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 =
For example,
Given height =
return
这个题就是求解 max {max{以height[i] 为高的最大面积}} 0 <= i < n
public class Solution {
public int largestRectangleArea(int[] height) {
if (height == null || height.length < 1) {
return 0;
}
int max = 0;
Stack<Integer> stack = new Stack<Integer>();
for (int i = 0; i < height.length; i++) {
while (!stack.isEmpty() && height[i] <= height[stack.peek()]) {
int curIndex = stack.pop();
int nowArea = 0;
if (stack.isEmpty()) {
nowArea = i * height[curIndex];
} else {
nowArea = (i - stack.peek() - 1) * height[curIndex];
}
if (nowArea > max) {
max = nowArea;
}
}
stack.push(i);
}
while (!stack.isEmpty()) {
int curIndex = stack.pop();
int nowArea = 0;
if (stack.isEmpty()) {
nowArea = (height.length) * height[curIndex];
} else {
nowArea = (height.length - stack.peek() - 1) * height[curIndex];
}
if (nowArea > max) {
max = nowArea;
}
}
return max;
}
}
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 height =
[2,1,5,6,2,3],
return
10.
这个题就是求解 max {max{以height[i] 为高的最大面积}} 0 <= i < n
public class Solution {
public int largestRectangleArea(int[] height) {
if (height == null || height.length < 1) {
return 0;
}
int max = 0;
Stack<Integer> stack = new Stack<Integer>();
for (int i = 0; i < height.length; i++) {
while (!stack.isEmpty() && height[i] <= height[stack.peek()]) {
int curIndex = stack.pop();
int nowArea = 0;
if (stack.isEmpty()) {
nowArea = i * height[curIndex];
} else {
nowArea = (i - stack.peek() - 1) * height[curIndex];
}
if (nowArea > max) {
max = nowArea;
}
}
stack.push(i);
}
while (!stack.isEmpty()) {
int curIndex = stack.pop();
int nowArea = 0;
if (stack.isEmpty()) {
nowArea = (height.length) * height[curIndex];
} else {
nowArea = (height.length - stack.peek() - 1) * height[curIndex];
}
if (nowArea > max) {
max = nowArea;
}
}
return max;
}
}
相关文章推荐
- [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
- leetcode-084:Largest Rectangle in Histogram
- LeetCode 笔记系列 17 Largest Rectangle in Histogram
- [LeetCode] Largest Rectangle in Histogram、Maximal Rectangle
- [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(直方图最大面积)
- leetcode之Largest Rectangle in Histogram
- [Leetcode] Largest Rectangle in Histogram
- leetcode - Largest Rectangle in Histogram
- leetcode -- Largest Rectangle in Histogram TODO O(N)
- LeetCode Online Judge 题目C# 练习 - Largest Rectangle in Histogram