1. 程式人生 > >Leetcode 84. Largest Rectangle in Histogram 柱狀圖的最大矩形面積

Leetcode 84. Largest Rectangle in Histogram 柱狀圖的最大矩形面積

解決思路:

       問題主要考察每一根柱子最大能擴多大,這個行為的實質就是找到柱子左邊剛比它小的柱子的位置在哪裡,以及右邊剛比它小的柱子位置在哪裡,為了模擬這個過程,我們可以用模擬這個過程。

       棧裡邊儲存的是一個遞增柱子的位置,每次遇到一個比棧頂位置小的柱子,則計算棧頂位置柱子所能拓展的面積,知道最後一個柱子。

class Solution {
public:
    int largestRectangleArea(vector<int>& heights) {
        int maxArea = 0;
        stack<int> s;   //棧中儲存的是遞增的元素的index
        heights.push_back(0);
        for(int i = 0;i < heights.size();)
        {
            if(s.empty() || heights[i] > heights[s.top()])
                s.push(i++);
            else
            {
                int top = s.top();
                s.pop();
                maxArea = max(maxArea, heights[top] * (s.empty() ? i : i - s.top() - 1));
            }
        }
        return maxArea;
    }
};