Problem:
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
.
class Solution {
public:
int largestRectangleArea(vector<int> &height) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int nSize = height.size();
if (nSize == 0) return 0;
int* l = new int[nSize];
int* r = new int[nSize];
l[0] = 0;
r[nSize-1] = nSize - 1;
for (int i = 1; i < nSize; ++i)
{
int j = i;
while(j > 0 && height[i] <= height[j-1])
j = l[j-1];
l[i] = j;
}
for(int i = nSize-2; i >= 0; --i)
{
int j = i;
while(j < nSize - 1 && height[i] <= height[j+1])
j = r[j+1];
r[i] = j;
}
int max = 0;
for (int i = 0; i < nSize; ++i)
{
int ar = (r[i] - l[i] + 1) * height[i];
max = max > ar ? max : ar;
}
return max;
}
};