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.
Example:
Input: [2,1,5,6,2,3] Output: 10
思路:
目前只能想到这个O(n^2)的方法,对于每一个柱子,左右查找其可以连续的长度。
class Solution {
public:
int largestRectangleArea(vector<int>& heights) {
int maxArea = 0;
for(int index=0; index<heights.size(); index++)
{
int left = index-1;
int right = index+1;
while(left>=0 && heights[left]>=heights[index])
{
left--;
}
while(right<heights.size() && heights[right]>=heights[index])
{
right++;
}
maxArea = max(maxArea, (right-left-1)*heights[index]);
}
return maxArea;
}
};