Leetcode 84. Largest Rectangle in Histogram 柱狀圖的最大矩形面積
阿新 • • 發佈:2018-12-21
解決思路:
問題主要考察每一根柱子最大能擴多大,這個行為的實質就是找到柱子左邊剛比它小的柱子的位置在哪裡,以及右邊剛比它小的柱子位置在哪裡,為了模擬這個過程,我們可以用棧模擬這個過程。
棧裡邊儲存的是一個遞增柱子的位置,每次遇到一個比棧頂位置小的柱子,則計算棧頂位置柱子所能拓展的面積,知道最後一個柱子。
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; } };