class Solution {
public:
int largestRectangleArea(vector<int>& heights) {
stack<int> s;
int res=0, i=0, size=heights.size();
int left=-1, right=size, val,s_top;
//
while(i<size){
if(!s.empty() && heights[i]<heights[s.top()]){
while(!s.empty()&&heights[i]<heights[s.top()]){
s_top=s.top();
val=heights[s_top];
right = i-s_top;//该长条距离右边i的距离
s.pop();
//该长条距离左边比它长度小或-1的距离
left=s.empty()?s_top+1:s_top-s.top();
//左边长加右边长减一 再乘以该长条高度
res=max(val*(right+left-1),res);
}
}
s.push(i);
i++;
}
i--;//因为此时i==heights.size(); 所以要减减
//处理栈中还存在的递增序列
while(!s.empty()){
right=size-i;
val =heights[i];
s.pop();
left=s.empty()?i+1:i-s.top();
res=max(val*(right+left-1),res);
if(s.empty())
return res;
i=s.top();
}
return res;
}
};
leetcode 84 柱状图中最大的矩形
最新推荐文章于 2024-05-22 16:28:54 发布