84. 柱状图中最大的矩形

  这道题不好想,如果用动态规划复杂度高,所以采用栈的方法。参考如下:

  https://blog.csdn.net/jingsuwen1/article/details/51577983

  主要考虑具体的出入栈的问题。

  

long long  max(long long  a, long long  b)
{
    return a > b ? a : b;
}
int largestRectangleArea(const vector<int> &data)
{
    stack<int> Stack;
    long long sMax = 0;
    int tmp = 0;
    for (int i = 0; i < data.size(); i++)
    {
        if (Stack.empty() || Stack.top() <= data[i])
            Stack.push(data[i]);
        else
        {
            int count = 1;
            while (!Stack.empty() && Stack.top()>data[i])
            {
                tmp = (count++) * Stack.top();
                sMax = max(sMax, tmp);
                Stack.pop();
            }
            while (count-->0)
            {
                Stack.push(data[i]);
            }
        }
    }
    //cout << "size : " << Stack.size() << endl;
    int count = 1;
    while (!Stack.empty())
    {
        sMax = max(sMax, Stack.top()*count++);
        Stack.pop();
    }

    return sMax;
}

猜你喜欢

转载自www.cnblogs.com/Oscar67/p/9281226.html