力扣85.最大矩形
力扣85.最大矩形
-
-
class Solution {
public:
int maximalRectangle(vector<vector<char>>& matrix) {
if (matrix.empty()) return 0;
int n = matrix.size(),m = matrix[0].size();
int res=0;
vector<int> line(m+2,0);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
line[j] = matrix[i-1][j-1] == '0' ? 0 : line[j] + 1;
res = max(res,cul(line));
}
return res;
}
int cul(vector<int>& h)
{
int res = 0;
stack<int> st;
int m = h.size();
vector<int> l(m,-1),r(m,m);
for(int j=0;j<m;j++)
{
while(!st.empty() && h[j] <= h[st.top()]) st.pop();
if(!st.empty()) l[j] = st.top();
st.push(j);
}
for(int j=m-1;j>=0;j--)
{
while(!st.empty() && h[j] <= h[st.top()]) st.pop();
if(!st.empty()) r[j] = st.top();
st.push(j);
}
for(int j=0;j<m;j++)
res = max(res, (r[j] - l[j] - 1) * h[j]);
return res;
}
};
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1850193.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!