【力扣-困難】84. 柱狀圖中最大的矩形
阿新 • • 發佈:2020-12-30
給定n個非負整數,用來表示柱狀圖中各個柱子的高度。每個柱子彼此相鄰,且寬度為 1 。
求在該柱狀圖中,能夠勾勒出來的矩形的最大面積。
以上是柱狀圖的示例,其中每個柱子的寬度為 1,給定的高度為[2,1,5,6,2,3]
。
圖中陰影部分為所能勾勒出的最大矩形面積,其面積為10
個單位。
示例:
輸入: [2,1,5,6,2,3] 輸出: 10
https://leetcode-cn.com/problems/largest-rectangle-in-histogram/
【單調棧】
遍歷柱狀圖,以當前柱子為基點,分別向左右找到小於自己高度的位置,左右這個跨度為寬,得到面積;
int largestRectangleArea(vector<int>& heights) { int n = heights.size(); vector<int> left(n), right(n, n); stack<int> monoStack; for(int i = 0 ; i < n; i++){ while(!monoStack.empty() && heights[monoStack.top()] >= heights[i]){ right[monoStack.top()] = i; monoStack.pop(); } left[i] = monoStack.empty() ? -1 : monoStack.top(); monoStack.push(i); } int ans = 0; for(int i = 0; i < n; i++){ ans = max(ans, heights[i] * (right[i] - left[i] - 1)); } return ans; }