Largest Rectangle in Histogram [leetcode]

来源:互联网 发布:origin作图软件功能 编辑:程序博客网 时间:2024/05/16 08:08

O(n)的方法,基于栈。参考http://www.geeksforgeeks.org/largest-rectangle-under-histogram/

int largestRectangleArea(vector<int> &height) {        vector<int> index;        int maxArea = 0;        for (int i = 0; i < height.size(); i++)        {            while (index.size() && height[i] <= height[index.back()])                maxArea = max(getArea(height, index, i), maxArea);            index.push_back(i);        }                while (index.size())            maxArea = max(getArea(height, index, height.size()), maxArea);        return maxArea;    }        int getArea(vector<int> &height, vector<int>& index, int start)    {        int areaH = height[index.back()];        index.pop_back();        int end = index.empty() ? -1 : index.back();        return (start - end - 1) * areaH;    }


0 0