代码拉取完成,页面将自动刷新
/*
* @lc app=leetcode.cn id=85 lang=c
*
* [85] 最大矩形
*/
// @lc code=start
int maximalRectangle(char** matrix, int matrixSize, int* matrixColSize){
int m = matrixSize;
if (m == 0) {
return 0;
}
int n = matrixColSize[0];
int left[m][n];
memset(left, 0, sizeof(left));
for (int i = 0; i < m; ++i) {
for (int j = 0; j < n; ++j) {
if (matrix[i][j] == '1') {
left[i][j] = (j == 0 ? 1 : left[i][j - 1] + 1);
}
}
}
//printf("%d", left[0][0]);
int ret = 0;
for (int j = 0; j < n; ++j) {
int up[m], down[m];
memset(up, 0, sizeof(up));
memset(down, 0, sizeof(down));
int stk[m];
int top = 0;
for (int i = 0; i < m; ++i) {
while (top > 0 && left[stk[top - 1]][j] >= left[i][j]) {
top--;
}
up[i] = top == 0 ? -1 : stk[top - 1];
stk[top++] = i;
}
top = 0;
for (int i = m - 1; i >= 0; --i) {
while (top > 0 && left[stk[top - 1]][j] >= left[i][j]) {
top--;
}
down[i] = top == 0 ? m : stk[top - 1];
stk[top++] = i;
}
for (int i = 0; i < m; ++i) {
int height = down[i] - up[i] - 1;
int area = height * left[i][j];
ret = fmax(ret, area);
}
}
return ret;
}
// @lc code=end
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。