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
.
public class Solution {
// 跳跃的优化: 贪心的思想
public int largestRectangleArea(int[] heights) {
int n = heights.length;
if(n == 0){
return 0;
}
int[] left = new int[n];
left[0] = 0;
for(int i = 1; i < n; i++){
int A = i;
while(A >0 && heights[A - 1] >= heights[i]){
A = left[A-1];
}
left[i] = A;
}
int[] right = new int[n];
right[n-1] = n-1;
for(int i = n-2; i >= 0; i--){
int A = i;
while(A < n - 1 && heights[A+1] >= heights[i]){
A = right[A + 1];
}
right[i] = A;
}
int ans = 0;
for(int i = 0; i < n; i++){
ans = Math.max(ans, heights[i] * (right[i] - left[i] + 1));
}
return ans;
}
}