Largest Rectangle in Histogram
描述
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.
我的代碼
詳細算法解析見上以篇博客只含1最大子矩陣
class Solution {
public:
int largestRectangleArea(vector<int>& heights) {
if (heights.empty())
{
return 0;
}
stack<int> s;
s.push(0);
int l,r;
int max=heights[0], tmpSize;
int len=heights.size();
for (int i=1; i<len; i++)
{
while (!s.empty() && heights[i] <= heights[s.top()])
{
r=i;
int e=s.top();
s.pop();
l=s.empty()?-1:s.top();
tmpSize=(r-l-1)*heights[e];
if (tmpSize > max)
max = tmpSize;
}
s.push(i);
}
while (!s.empty())
{
r=len;
int e=s.top();
s.pop();
l=s.empty()?-1:s.top();
tmpSize=(r-l-1)*heights[e];
if (tmpSize > max)
max = tmpSize;
}
return max;
}
};