一、题目
二、代码
//核心:找左右两侧 第一个较低的
class Solution
{
public:
int largestRectangleArea(vector<int>& heights)
{
int i,j;
int return_int=0;
stack<int> st;
heights.insert(heights.begin(),0);
heights.push_back(0);
st.push(0);
for(i=1;i<heights.size();i++)
{
if(heights[i]>heights[st.top()])
{
st.push(i);
}
else if(heights[i]==heights[st.top()])
{
st.pop();
st.push(i);
}
else
{
int mid,left;
int h,w;
while(heights[i]<heights[st.top()])
{
mid=st.top();
st.pop();
left=st.top();
h=heights[mid];
w=(i-1)-left;
return_int=max(return_int,h*w);
}
st.push(i);
}
}
return return_int;
}
};