给定 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