Saturday, May 2, 2015

[LeetCode] 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 height = [2,1,5,6,2,3],
return 10.
class Solution
{
public:
     int largestRectangleArea(vector<int> &height) 
     {
        height.push_back(0);
        int len = height.size();
        stack<int> s;
        s.push(-1);
        int maxArea = 0;
        int i = 0;
        while(i < len)
        {
            if(height[i]>= height[s.top()]){
                s.push(i);
                i++;
            }
            else
            {
                int tp = s.top();
                s.pop();
                maxArea = max(maxArea, height[tp]*(i-1-s.top()));
            }
        }
        return maxArea;
    }
};