1 Star 0 Fork 1

陈鹏/leecode with labuladong

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
85.最大矩形.c 1.42 KB
一键复制 编辑 原始数据 按行查看 历史
陈鹏 提交于 2022-08-28 13:59 . 单调栈
/*
* @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
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/Chan1998/leecode-with-labuladong.git
git@gitee.com:Chan1998/leecode-with-labuladong.git
Chan1998
leecode-with-labuladong
leecode with labuladong
master

搜索帮助