【LeetCode每日一题】——85.最大矩形

文章目录

  • 一【题目类别】
  • 二【题目难度】
  • 三【题目编号】
  • 四【题目描述】
  • 五【题目示例】
  • 六【题目提示】
  • 七【解题思路】
  • 八【时间频度】
  • 九【代码实现】
  • 十【提交结果】

一【题目类别】

  • 矩阵

二【题目难度】

  • 困难

三【题目编号】

  • 85.最大矩形

四【题目描述】

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

五【题目示例】

  • 示例 1:

    • 在这里插入图片描述
    • 输入:matrix = [[“1”,“0”,“1”,“0”,“0”],[“1”,“0”,“1”,“1”,“1”],[“1”,“1”,“1”,“1”,“1”],[“1”,“0”,“0”,“1”,“0”]]
    • 输出:6
    • 解释:最大矩形如上图所示。
  • 示例 2:

    • 输入:matrix = []
    • 输出:0
  • 示例 3:

    • 输入:matrix = [[“0”]]
    • 输出:0
  • 示例 4:

    • 输入:matrix = [[“1”]]
    • 输出:1
  • 示例 5:

    • 输入:matrix = [[“0”,“0”]]
    • 输出:0

六【题目提示】

  • r o w s = = m a t r i x . l e n g t h rows == matrix.length rows==matrix.length
  • c o l s = = m a t r i x [ 0 ] . l e n g t h cols == matrix[0].length cols==matrix[0].length
  • 1 < = r o w , c o l s < = 200 1 <= row, cols <= 200 1<=row,cols<=200
  • m a t r i x [ i ] [ j ] 为 ′ 0 ′ 或 ′ 1 ′ matrix[i][j] 为 '0' 或 '1' matrix[i][j]01

七【解题思路】

  • 首先创建一个辅助数组left,用于记录每个位置的左边连续 ‘1’ 的个数
  • 然后对于二维数组中每一个点,我们计算以这个点作为右下角的矩形的面积,我们利用“向上拓展”的方式,矩阵的宽度是“向上拓展”的过程中最短的宽度,高度通过当前位置减去遍历到的位置然后加一得到(因为数组从零开始计数)
  • 然后通过比较最大值得到最大矩形的面积
  • 最后返回结果即可

八【时间频度】

  • 时间复杂度: O ( m 2 n ) O(m^2n) O(m2n) m 、 n m、n mn分别为传入的二维数组的行数和列数
  • 空间复杂度: O ( m n ) O(mn) O(mn) m 、 n m、n mn分别为传入的二维数组的行数和列数

九【代码实现】

  1. Java语言版
class Solution {public int maximalRectangle(char[][] matrix) {int m = matrix.length;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 res = 0;for(int i = 0;i < m;i++){for(int j = 0;j < n;j++){if(matrix[i][j] == '0'){continue;}int width = left[i][j];int area = width;for(int k = i - 1;k >= 0;k--){width = Math.min(width, left[k][j]);area = Math.max(area,(i - k + 1) * width);}res = Math.max(res, area);}}return res;}
}
  1. C语言版
int maximalRectangle(char** matrix, int matrixSize, int* matrixColSize)
{int m = matrixSize;int n = matrixColSize[0];int** left = (int **)malloc(sizeof(int*) * m);for(int i = 0;i < m;i++){left[i] = (int*)calloc(n, sizeof(int));}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 res = 0;for(int i = 0;i < m;i++){for(int j = 0;j < n;j++){if(matrix[i][j] == '0'){continue;}int width = left[i][j];int area = width;for(int k = i - 1;k >= 0;k--){width = fmin(width, left[k][j]);area = fmax(area, (i - k + 1) * width);}res = fmax(res, area);}}return res;
}
  1. Python语言版
class Solution:def maximalRectangle(self, matrix: List[List[str]]) -> int:m = len(matrix)n = len(matrix[0])left = [[0 for _ in range(n)] for _ in range (m)]for i in range(0, m):for j in range(0, n):if matrix[i][j] == '1':left[i][j] = (0 if j == 0 else left[i][j - 1]) + 1res = 0for i in range(0, m):for j in range(0, n):if matrix[i][j] == '0':continuewidth = left[i][j]area = widthfor k in range(i - 1, -1, -1):width = min(width, left[k][j])area = max(area, (i - k + 1) * width)res = max(res, area)return res
  1. C++语言版
class Solution {
public:int maximalRectangle(vector<vector<char>>& matrix) {int m = matrix.size();int n = matrix[0].size();vector<vector<int>> left(m, vector<int>(n, 0));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 res = 0;for(int i = 0;i < m;i++){for(int j = 0;j < n;j++){if(matrix[i][j] == '0'){continue;}int width = left[i][j];int area = width;for(int k = i - 1;k >= 0;k--){width = fmin(width, left[k][j]);area = fmax(area, (i - k + 1) * width);}res = fmax(res, area);}}return res;}
};

十【提交结果】

  1. Java语言版
    在这里插入图片描述

  2. C语言版
    在这里插入图片描述

  3. Python语言版
    在这里插入图片描述

  4. C++语言版
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/26004.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

excel 计算 分位值

_XLFN.QUARTILE.EXC(Result 1!G:G,2) 和 PERCENTILE 都可以用来计算一组数据的分位数&#xff0c;但是它们的计算方式略有不同。 _XLFN.QUARTILE.EXC(Result 1!G:G,2) 是 Excel 中的一个函数&#xff0c;在计算一个数据集的四分位数时使用。其中&#xff0c;第一个参数 Result…

P1144 最短路计数

最短路计数 题目描述 给出一个 N N N 个顶点 M M M 条边的无向无权图&#xff0c;顶点编号为 1 ∼ N 1\sim N 1∼N。问从顶点 1 1 1 开始&#xff0c;到其他每个点的最短路有几条。 输入格式 第一行包含 2 2 2 个正整数 N , M N,M N,M&#xff0c;为图的顶点数与边数…

【基础类】—三栏页面布局的方案和优缺点

一、假设高度已知&#xff0c;中间宽度自适应&#xff0c;三栏&#xff08;列&#xff09;布局的方案有哪些&#xff1f; float浮动、absolute绝对定位、flex弹性盒子、table表格布局、grid网格布局 浮动 float <style>* {margin: 0;padding: 0;}.container {width: 1…

内网穿透-————SSH远程连接树莓派

前言 文章目录 前言内网穿透实现公网SSH远程连接树莓派1. 在树莓派上安装[cpolar客户端](https://www.cpolar.com/)2. 在树莓派浏览器中输入本地9200端口3. 在公共互联网的电脑的命令行界面输入命令 内网穿透实现公网SSH远程连接树莓派 随着科技的进步和信息技术的发展&#x…

异步javaScript

在本文中&#xff0c;我们将解释什么是异步编程&#xff0c;为什么我们需要它&#xff0c;并简要讨论 JavaScript 历史上异步函数是怎样被实现的。 预备知识&#xff1a;基本的计算机素养&#xff0c;以及对 JavaScript 基础知识的一定了解&#xff0c;包括函数和事件处理程序…

20天学会rust(三)没有object的rust怎么面向对象?

面向对象我们都很熟悉&#xff0c;可以说它是一种软件开发最重要的编程范式之一&#xff0c;它将程序中的数据和操作数据的方法组织成对象。面向对象有几个重要特性&#xff1a; 封装、继承和多态&#xff0c;基于这些特性带来了在可重用性、可维护性、扩展性、可靠性的优点。 …

浅析pom文件标签功能

问题&#xff1a; 对maven项目的pom文件结构和标签不是很清晰 学习笔记&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project><parent><!-- 父项目信息 --></parent><!-- 声明项目描述符遵循哪一个POM模型版…

自然语言处理从入门到应用——LangChain:记忆(Memory)-[基础知识]

分类目录&#xff1a;《自然语言处理从入门到应用》总目录 默认情况下&#xff0c;链&#xff08;Chains&#xff09;和代理&#xff08;Agents&#xff09;是无状态的&#xff0c;这意味着它们将每个传入的查询视为独立的&#xff08;底层的LLM和聊天模型也是如此&#xff09;…

用Rust实现23种设计模式之原型模式

在 Rust 中&#xff0c;原型模式可以通过实现 Clone trait 来实现。原型模式是一种创建型设计模式&#xff0c;它允许通过复制现有对象来创建新对象&#xff0c;而无需显式地使用构造函数。下面是一个使用 Rust 实现原型模式的示例&#xff0c;带有详细的代码注释和说明&#x…

shell 入门练习小记

一、hello world #!/bin/bash echo "Hello World !"#! 为约定的标记&#xff0c;告诉系统这个脚本需要什么解释器执行&#xff0c;后接绝对路径 /bin/bash 表示期望 bash去解析并运行shell echo用于向窗口输出文本 chmod x ./test.sh #给脚本赋执行权限 ./test.sh …

Centos7克隆快速复制多台虚拟机|互通互联

背景&#xff1a;有时候&#xff0c;我们在用虚拟机的时候会用到多个进行使用。重新安装会花费大量的时间&#xff0c;此时&#xff0c;我们可以通过vmware虚拟机自带的功能快速克隆出完全相同的系统。 前提&#xff1a;被克隆的虚拟机系统要处于关闭状态 步骤&#xff1a;…

Android入门教程||Android 架构||Android 应用程序组件

Android 架构 Android 操作系统是一个软件组件的栈&#xff0c;在架构图中它大致可以分为五个部分和四个主要层。 Linux内核 在所有层的最底下是 Linux - 包括大约115个补丁的 Linux 3.6。它提供了基本的系统功能&#xff0c;比如进程管理&#xff0c;内存管理&#xff0c;设…

ChatGPT FAQ指南

问:chatgpt 国内不开放注册吗? OpenAI不允许大陆和香港用户注册访问 openai可以的,chatGPT不行 以下国家IP不支持使用 中国(包含港澳台) 俄罗斯 乌克兰 阿富汗 白俄罗斯 委内瑞拉 伊朗 埃及 问:ChatGPT和GPT-3什么关系? GPT-3是OpenAI推出的AI大语言模型 ChatGPT是在G…

spring eurake中使用IP注册

在开发spring cloud的时候遇到一个很奇葩的问题&#xff0c;就是服务向spring eureka中注册实例的时候使用的是机器名&#xff0c;然后出现localhost、xxx.xx等这样的内容&#xff0c;如下图&#xff1a; eureka.instance.perferIpAddresstrue 我不知道这朋友用的什么spring c…

H263压缩码流如何分解为一个一个单元并查询到其宽高?

H263码流尺寸规格有限&#xff0c;只有以下几种&#xff1a; H263码流有四个分层&#xff1a; 1、图像层 2、块组 3、宏块 4、块 下面分别介绍&#xff1a; 具体介绍如下&#xff0c;5.1.3中红色框选部分就是压缩码流的宽高指示&#xff1a; 图像层 上面就是H263的图像层&am…

【回眸】备考PMP考点汇总 四(距离考试还有12天)

目录 前言 【回眸】备考PMP考点汇总 四&#xff08;距离考试还有12天&#xff09; 3、敏捷阶段框架 4、Scrum敏捷实践 5、敏捷交付框架 6、推测阶段 7、用户故事卡片 8、用户故事优先级 9、风险调整代办事项列表 10、用户故事估算 11&#xff1a;Scrum敏捷实践 12、…

使用docker部署一个jar项目

简介: 通过docker镜像, docker可以在服务器上运行包含项目所需运行环境的docker容器, 在线仓库里有很多各个软件公司官方发布的镜像, 或者第三方的镜像. 如果我们需要使用docker把我们的应用程序打包成镜像, 别的机器上只要安装了docker, 就可以直接运行镜像, 而不需要再安装应…

拆分PDBQT文件并将其转换为PDB格式

拆分PDBQT文件转为PDB格式 1. vina_split拆分PDBQT文件 假设你用AutoDock Vina做了对接&#xff0c;那么所有预测的结合构象都被放入一个多构象 PDBQT 文件中&#xff0c;如果需要拆分后进行可视化分析&#xff0c;那么Vina官方自带了vina_split来进行拆分。下面是vina_split…

⛳ Java 枚举

目录 ⛳ 枚举**&#x1f3a8; 例子&#xff1a;使用常量表示线程状态**&#x1f3ed; 例子&#xff1a;使用枚举表示线程状态&#x1f4e2; 例子&#xff1a;订单状态的枚举 ⛳ 枚举 类的对象只有有限个&#xff0c;确定的。 使用场景&#xff1a; 星期&#xff1a; Monday(星…

CentOS 安装 Jenkins

本文目录 1. 安装 JDK2. 获取 Jenkins 安装包3. 将安装包上传到服务器4. 修改 Jenkins 配置5. 启动 Jenkins6. 打开浏览器访问7. 获取并输入 admin 账户密码8. 跳过插件安装9. 添加管理员账户 1. 安装 JDK Jenkins 需要依赖 JDK&#xff0c;所以先安装 JDK1.8。输入以下命令&a…