您的位置:首页 > 其它

Largest Rectangle in Histogram

2015-08-07 13:47 453 查看


Largest Rectangle in Histogram

Total Accepted: 18582 Total
Submissions: 86792My Submissions

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 height =
[2,1,5,6,2,3]
,

return
10
.

Have you been asked this question in an interview?

public class Solution {
public int largestRectangleArea(int[] height) {
int [] leftSmall = new int[height.length];
int [] rightSmall = new int[height.length];
Stack<PositionNode> smallStack = new Stack<PositionNode>();
for (int i = 0; i < height.length; i++) {
while (!smallStack.isEmpty() && smallStack.peek().height >= height[i]){
smallStack.pop();
}
if (!smallStack.isEmpty())
{
leftSmall[i] = smallStack.peek().pos;
}  else {
leftSmall[i] = -1;
}
smallStack.push(new PositionNode(i,height[i]));
}
smallStack.clear();
for (int i = height.length - 1; i > -1; i--) {
while (!smallStack.isEmpty() && smallStack.peek().height >= height[i]){
smallStack.pop();
}
if (!smallStack.isEmpty()) {
rightSmall[i] = smallStack.peek().pos;
}
else {
rightSmall[i] = height.length ;
}
PositionNode newNode = new PositionNode(i,height[i]);
smallStack.push(newNode);
}
int maxArea = 0;
for (int i = 0; i < height.length; i++) {
int thisArea = height[i] * Math.abs(rightSmall[i] - leftSmall[i] - 1);
maxArea = Math.max(maxArea,thisArea);
}
return maxArea;
}
class PositionNode {
int pos;
int height;
public PositionNode(int pos, int height) {
this.pos = pos;
this.height = height;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: