前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >85. 最大矩形

85. 最大矩形

作者头像
张伦聪zhangluncong
发布2022-10-26 18:02:29
2320
发布2022-10-26 18:02:29
举报
文章被收录于专栏:张伦聪的技术博客

给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。

示例:

代码语言:javascript
复制
输入:
[
  ["1","0","1","0","0"],
  ["1","0","1","1","1"],
  ["1","1","1","1","1"],
  ["1","0","0","1","0"]
]
输出: 6

解:和84题,同样使用单调栈,但是比上题难理解很多。

代码语言:javascript
复制
 public int maximalRectangle(char[][] matrix) {
        int rLen = matrix.length;
        int cLen = rLen == 0 ? 0 : matrix[0].length;
        int max = 0;
        int[] h = new int[cLen + 1];
        for (int row = 0; row < rLen; row++) {
            //每行维护一个单调栈
            Stack<Integer> s = new Stack<Integer>();
            s.push(-1);
            for (int i = 0; i <= cLen; i++) {
                //遍历每一行的累计高度
                if (i < cLen && matrix[row][i] == '1') {
                    h[i] += 1;
                } else {
                    h[i] = 0;
                }
                //破坏单调栈
                while (s.peek() != -1 && h[i] < h[s.peek()]) {
                    int yIdx = s.pop();
                    int y = h[yIdx];//矩形宽
                    int xIdx = s.peek();
                    int x = i - xIdx - 1;//矩形长
                    max = Math.max(max, x * y);
                }
                s.push(i);
            }
        }
        return max;
    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-07-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档