36(牛客Top100)-85.最大矩阵

2023-05-16

给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。
思路:先抄下来,我也不懂
方法1:单调栈

public int maximalRectangle(char[][] matrix) {
        int m = matrix.length;
        if (m == 0) {
            return 0;
        }
        int n = matrix[0].length;
        int[][] left = new int[m][n];

        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (matrix[i][j] == '1') {
                    left[i][j] = (j == 0 ? 0 : left[i][j - 1]) + 1;
                }
            }
        }

        int ret = 0;
        for (int j = 0; j < n; j++) { // 对于每一列,使用基于柱状图的方法
            int[] up = new int[m];
            int[] down = new int[m];

            Deque<Integer> stack = new LinkedList<Integer>();
            for (int i = 0; i < m; i++) {
                while (!stack.isEmpty() && left[stack.peek()][j] >= left[i][j]) {
                    stack.pop();
                }
                up[i] = stack.isEmpty() ? -1 : stack.peek();
                stack.push(i);
            }
            stack.clear();
            for (int i = m - 1; i >= 0; i--) {
                while (!stack.isEmpty() && left[stack.peek()][j] >= left[i][j]) {
                    stack.pop();
                }
                down[i] = stack.isEmpty() ? m : stack.peek();
                stack.push(i);
            }

            for (int i = 0; i < m; i++) {
                int height = down[i] - up[i] - 1;
                int area = height * left[i][j];
                ret = Math.max(ret, area);
            }
        }
        return ret;
    }

时间复杂度:O(mn)
空间复杂度:O(mn)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

36(牛客Top100)-85.最大矩阵 的相关文章

  • 那些年我们踩过的坑-线程池核心线程数也有可能销毁重新创建

    这个坑我在我另一篇文章里提过 不过感觉挺重要的 所以单独列出来 https blog csdn net wwdwjm article details 99672803 一般我们都知道线程池初始化的时候会设置核心线程数CorePoolSize
  • windows编程经典书籍

    本人是刚刚开始学习windows编程的 感觉看雪学院的大牛很NB 想找一些书籍来看学习学习 可是不知道看哪些书好 驱动 对菜鸟们来说真是一个很深奥的话题 所以 我找来了这篇文章供大家分享 以后大家发现什么好书就在楼下跟贴吧 作者 xff1a
  • @PathVariable(“id“) String id和@RequestParam(“userName“) String username区别

    64 PathVariable 原始方式 xff1a deleteUser id 61 1 rest方式 xff1a user delete 1 64 PathVariable使用rest方式以路径方式传输数据到服务器中 SpringMVC
  • proteus仿真控制电机正转、反转和停止转动

    前言 本文主要介绍了 基于stm32单片机的电机驱动 在proteus仿真电路中 控制电机的正转 反转以及停止转动 一 代码部分 include stm32f10x h int main void nbsp nbsp nbsp void D
  • 对二维图像进行离散傅里叶变换

    一 二维傅里叶变换的原理和公式 对一个M行 N列的二维数字图像 其矩阵表示如下 则其二维离散傅里叶 DFT 的公式如下 正变换 nbsp nbsp nbsp nbsp 逆变换 nbsp nbsp nbsp nbsp nbsp
  • 我的英语学习

    define 定义 xff0c 给 下定义 be defined as 被规定 move up 提升 xff0c 晋升 corporate 公司 xff0c 集体 xff0c 公司的 xff0c 集体的 ladder 梯子 xff0c 阶梯
  • 对二维离散图像进行哈达玛变换

    目录 一 沃尔什变换简介 二 哈达玛变换简介 三 哈达玛变换的原理及公式 1
  • java变量笔记

    一 变量类型及使用 int age 61 20 double score 61 88 6 char gender 61 39 男 39 String name 61 34 jack 34 变量必须先声明后使用 xff1b 变量在同一作用域内

随机推荐

  • java运算符

    一 运算符介绍 运算符是一种特殊的符号 xff0c 用以表示数据的运算 xff0c 赋值和比较等 一些算数运算符 除法比较特殊 xff0c 取决于参与运算的数据类型 xff0c 例如10 4 61 2 xff0c 10 0 4 61 2 5
  • 在linux系统下中.sh文件无法执行的问题及两种解决方法

    在写了shell脚本1 sh文件后 xff0c 想要执行该脚本 xff0c 结果提示我权限不够 xff1a 然后我就加上了管理员的权限 xff1a xff08 其实这里提示的并不是管理员的权限不够 xff0c 而是这个shell脚本并没有执
  • makefile的简单实现

    这里是简单的关于makefile的一个实现案例 xff0c 目的是让一些类似于我这样没有接触过的小白 xff0c 切实的感受一下什么是makefile 首先找到一个空文件夹 xff0c 我们将在该文件夹下进行操作 1 创建并编辑hello
  • Java集合总结图

    Java集合总结图
  • Android keyguard之上如何显示Toast

    ENV Android M 6 0 1 锁屏之上应该如何显示Toast呢 xff1f 看下面的实现 xff1a public class KeyguardToast public static Toast makeText Context
  • 2021-11-01

    建立spring helloword工程 1 建立maven工程 命名为spring helloword 2 导入依赖 span class token generics span class token punctuation lt sp
  • 2021-11-04

    spring基础 Spring是一个轻量级的控制反转 IoC 和面向切面 AOP 的容器 xff08 框架 xff09 IOC Inversion of Control 控制反转 IOC创建对象的方式 1 默认通过无参构造器创建对象 spa
  • filter和sessionListener实现session超时退出功能,过滤掉轮询请求

    filter和sessionListener实现session超时退出功能 xff0c 过滤掉轮询请求 1 requestFilter span class token keyword public span span class toke
  • MVC web项目中引入jquery插件

    MVC web项目中引入jquery插件 1 下载jquery https jquery com 看到这样的文档 xff0c 直接CTRL 43 S保存到自己的文件夹 2 将文件夹中的js文件直接拖拽导入到项目中的web文件下 xff0c
  • 27(牛客Top100)-62. 不同路径

    一个机器人位于一个 m x n 网格的左上角 xff08 起始点在下图中标记为 Start xff09 机器人每次只能向下或者向右移动一步 机器人试图达到网格的右下角 xff08 在下图中标记为 Finish xff09 问总共有多少条不同
  • 28(牛客Top100)-64. 最小路径和

    给定一个包含非负整数的 m x n 网格 grid xff0c 请找出一条从左上角到右下角的路径 xff0c 使得路径上的数字总和为最小 说明 xff1a 每次只能向下或者向右移动一步 思路 xff1a 动态规划 1 状态定义 初始化二维数
  • 30(牛客Top100)-72. 编辑距离

    给你两个单词 word1 和 word2 xff0c 请你计算出将 word1 转换成 word2 所使用的最少操作数 你可以对一个单词进行如下三种操作 xff1a 插入一个字符 删除一个字符 替换一个字符 思路 xff1a 动态规划 1
  • 29(牛客Top100)-70.爬楼梯

    假设你正在爬楼梯 需要 n 阶你才能到达楼顶 每次你可以爬 1 或 2 个台阶 你有多少种不同的方法可以爬到楼顶呢 xff1f 注意 xff1a 给定 n 是一个正整数 思路 xff1a 方法1 xff1a 动态规划 span class
  • 31(牛客Top100)-75.颜色分类

    给定一个包含红色 白色和蓝色 xff0c 一共 n 个元素的数组 xff0c 原地对它们进行排序 xff0c 使得相同颜色的元素相邻 xff0c 并按照红色 白色 蓝色顺序排列 此题中 xff0c 我们使用整数 0 1 和 2 分别表示红色
  • spring boot面试总结

    spring boot xff08 1 xff09 新建springboot项目 xff08 2 xff09 springboot整合mybatis实现增删改查 1 概述 1 1 springboot介绍 Spring Boot 是 Spr
  • [Android] 以singleInstance模式加载的Activity怎么接收以Bundle方式传递过来的参数 By onNewIntent() but not onResum

    问题来自这儿 xff0c Bundle在接收时未更新 xff0c http blog csdn net dadoneo article details 8164058 虽然可以暂时解决问题 xff0c 但并未说到根本原因 xff0c 下面就
  • 33(牛客Top100)-78.子集

    给你一个整数数组 nums xff0c 数组中的元素 互不相同 返回该数组所有可能的子集 xff08 幂集 xff09 解集 不能 包含重复的子集 你可以按 任意顺序 返回解集 思路 方法1 xff1a 二进制排序 xff08 字典排序 x
  • 34(牛客Top100)-79.单词搜索

    给定一个 m x n 二维字符网格 board 和一个字符串单词 word 如果 word 存在于网格中 xff0c 返回 true xff1b 否则 xff0c 返回 false 单词必须按照字母顺序 xff0c 通过相邻的单元格内的字母
  • 35(牛客Top100)-84.柱状图中最大的矩形

    给定 n 个非负整数 xff0c 用来表示柱状图中各个柱子的高度 每个柱子彼此相邻 xff0c 且宽度为 1 求在该柱状图中 xff0c 能够勾勒出来的矩形的最大面积 思路 xff1a 方法1 xff1a 栈 43 邵兵 span clas
  • 36(牛客Top100)-85.最大矩阵

    给定一个仅包含 0 和 1 大小为 rows x cols 的二维二进制矩阵 xff0c 找出只包含 1 的最大矩形 xff0c 并返回其面积 思路 xff1a 先抄下来 xff0c 我也不懂 方法1 xff1a 单调栈 span clas