给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。
求在该柱状图中,能够勾勒出来的矩形的最大面积。
image以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]
。
图中阴影部分为所能勾勒出的最大矩形面积,其面积为 10
个单位。
示例:
输入: [2,1,5,6,2,3]
输出: 10</pre>
思路:
http://www.cnblogs.com/grandyang/p/4322653.html
用单调栈解决,遇到比当前高度更高的的加入栈,往后遍历。否则计算当前局部最高值最大矩形,具体做法是从栈中弹出局部最高,计算当前这块矩形,不往后遍历,重复以上过程。本质就是遍历到局部最大值时往前找最大的矩形。实现代码如下所示。
class Solution {
public:
int largestRectangleArea(vector<int>& heights) {
int res=0;
heights.push_back(0);
stack<int> st;
for(int i=0;i<heights.size();i++)
{
if(st.empty()||heights[i]>heights[st.top()])
{
st.push(i);
}
else
{
int curr=st.top();
st.pop();
int area=heights[curr]*(st.empty()?i:(i-1-st.top()));
res=max(res,area);
i--;
}
}
return res;
}
};
网友评论