給定 n 個非負整數,用來表示柱狀圖中各個柱子的高度。每一個柱子彼此相鄰,且寬度爲 1 。數組
求在該柱狀圖中,可以勾勒出來的矩形的最大面積。spa
以上是柱狀圖的示例,其中每一個柱子的寬度爲 1,給定的高度爲 [2,1,5,6,2,3]
。.net
圖中陰影部分爲所能勾勒出的最大矩形面積,其面積爲 10
個單位。code
示例:blog
輸入: [2,1,5,6,2,3] 輸出: 10
這道題跟LeetCode 11很類似,可是由於考慮柱子寬度,所以解題技巧不相同,此題考查單調棧的應用。咱們首先在數組最後加入0,這是爲了方便處理完數組中的全部高度數據。假設存儲高度座標的棧爲stack,當前處理的高度座標爲i(i∈[0→n]):get
1 class Solution { 2 public: 3 int largestRectangleArea(vector<int>& heights) { 4 stack<int> s; 5 int i = 0, maxArea = 0; 6 heights.push_back(0); 7 while(i < heights.size()){ 8 if(s.empty() || heights[s.top()] <= heights[i]){ 9 s.push(i); 10 i++; 11 } 12 else{ 13 int top = s.top(); 14 s.pop(); 15 int l = s.empty() ? i : i - s.top() - 1; 16 maxArea = max(maxArea, heights[top] * l); 17 } 18 } 19 return maxArea; 20 } 21 };
參考自io
LeetCode 84. Largest Rectangle in Histogram(直方圖中最大矩形面積)class