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.
public class Solution {
public int largestRectangleArea(int[] height) {
Stack<Integer> stack = new Stack<Integer>();
int i = 0;
int maxArea = 0;
int[] tmp = Arrays.copyOf(height, height.length+1);
while (i < tmp.length) {
if (stack.isEmpty() || tmp[stack.peek()] <= tmp[i]) {
stack.push(i++);
} else {
int t = stack.pop();
maxArea = Math.max(maxArea, tmp[t]*(stack.isEmpty() ? i: (i-stack.peek()-1)));
}
}
return maxArea;
}
}
本文介绍了一种算法,用于计算给定直方图中最大矩形的面积。通过使用栈结构来跟踪高度变化,该算法能够高效地找到最大矩形,并返回其面积。
905

被折叠的 条评论
为什么被折叠?



