LeetCode 85. Maximal Rectangle
class Solution {
public:
int method(vector<int> h)//求柱状图中最大的矩形
{
int n=h.size();
vector<int> l=vector<int> (n),r=l;
stack<int> st;
//预处理l,r数组
for(int i=0;i<n;i++)
{
while(st.size()&&h[st.top()]>=h[i]) st.pop();
if(st.size()) l[i]=st.top();
else l[i]=-1; //没有比h[i]小的数
st.push(i);
}
st=stack<int> ();
for(int i=n-1;i>=0;i--)
{
while(st.size()&&h[st.top()]>=h[i]) st.pop();
if(st.size()) r[i]=st.top();
else r[i]=n; //没有比h[i]小的数
st.push(i);
}
//计算最大矩形面积
int res=0;
for(int i=0;i<n;i++)
res=max(res,h[i]*(r[i]-l[i]-1));
return res;
}
int maximalRectangle(vector<vector<char>>& matrix) {
int n=matrix.size(),m=matrix[0].size();
vector<vector<int> > h=vector<vector<int> > (n,vector<int> (m));
//初始化h[i][j],表示matrix[i][j]在j列从i行往上数,1的个数
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
{
if('0'==matrix[i][j]) h[i][j]=0;
else if(i) h[i][j]=1+h[i-1][j];
else h[i][j]=1;
}
//枚举每一行
int res=0;
for(int i=0;i<n;i++)
res=max(res,method(h[i]));
return res;
}
};
有帮助的话可以点个赞,我会很开心的~
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本