力扣0085——最大矩形

最大矩形

难度:困难

题目描述

给定一个仅包含 01 、大小为 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

题解

是0084的进阶,可以将它升维转换为二维数组,具体如下
比如matrix = [[“1”,“0”,“1”,“0”,“0”],[“1”,“0”,“1”,“1”,“1”],[“1”,“1”,“1”,“1”,“1”],[“1”,“0”,“0”,“1”,“0”]]
可以转换为:

4 0 3 0 0
3 0 2 3 2
2 1 1 2 1
1 0 0 1 0

即:将需要讨论的内容缩小,将本来需要讨论的纵坐标转化为每一行的高,之后就可以根据0084的算法来对每一行的内容都取最大面积,之后对结果进行对比,最大的数即为结果

想法代码

class Solution
{public static void Main(String[] args){char[][] matrix = {new[] { '1', '0', '1', '0', '0' },new[] { '1', '0', '1', '1', '1' },new[] { '1', '1', '1', '1', '1' },new[] { '1', '0', '0', '1', '0' }};Solution solution = new Solution();int ans = solution.MaximalRectangle(matrix);Console.WriteLine(ans);}public int MaximalRectangle(char[][] matrix){int maxArea = 0;int rows = matrix.Length;int cols = matrix[0].Length;int[] heights = new int[cols];for (int i = 0; i < rows; i++){for (int j = 0; j < cols; j++){if (matrix[i][j] == '0'){heights[j] = 0;}else{heights[j]++;}}maxArea = Math.Max(maxArea, GetMaxArea(heights));}return maxArea;}public int GetMaxArea(int[] heights){int[] left = new int[heights.Length];int[] right = new int[heights.Length];Array.Fill(left, -1);Array.Fill(right, heights.Length);Stack<int> stack = new Stack<int>();for (int i = 0; i < heights.Length; i++){int height = heights[i];while (stack.Count > 0 && heights[stack.Peek()] >= height){right[stack.Pop()] = i;}if (stack.Count > 0){left[i] = stack.Peek();}stack.Push(i);}int ans = 0;for (int i = 0; i < heights.Length; i++){ans = Math.Max(ans, (right[i] - left[i] - 1) * heights[i]);}return ans;}
}

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

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

相关文章

分布式id-雪花算法

一、雪花算法介绍 Snowflake&#xff0c;雪花算法是有Twitter开源的分布式ID生成算法&#xff0c;以划分命名空间的方式将64bit位分割成了多个部分&#xff0c;每个部分都有具体的不同含义&#xff0c;在Java中64Bit位的整数是Long类型&#xff0c;所以在Java中Snowflake算法生…

2024年项目基金撰写与技巧及GPT融合

详情点击链接&#xff1a;2024年项目基金撰写与技巧及GPT融合 一&#xff1a;国自然项目 1.1项目 1.2接收情况 1.3受理情况 1.4近五年资助情况 1.5国自然改革解读 1.6博后项目 二&#xff1a;基金的撰写技巧 2.1 问题属性与评阅标准 2.2 前期准备工作-如何去选题 2.…

在线商城系统设计

设计一个在线商品商店的数据库模式涉及多个方面&#xff0c;包括产品、订单、用户、支付等。 数据库设计&#xff1a; 用户表 (Users): UserID (主键)用户名密码电子邮件地址电话号码 产品表 (Products): ProductID (主键)产品名称描述价格库存数量分类ID (外键&#xff0c;连接…

203.移除链表元素(力扣LeetCode)

文章目录 203.移除链表元素题目描述原链表删除元素虚拟头节点 203.移除链表元素 题目描述 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示例 1&#xff1a; 输入&#xff1a;head …

Ubuntu20.04添加桌面启动、侧边栏启动和终端启动

桌面启动 新建XX.desktop文件 在桌面新建一个XX.desktop文件&#xff0c;以QtCreator为例。 &#xff08;注意这里不能使用sudo&#xff0c;因为这样会把文件的权限归为root&#xff0c;导致后续设置可执行程序不方便&#xff09; gedit qtcreator.desktop在XX.desktop文件中…

【DeepLearning-9】YOLOv5模型网络结构中加入MobileViT模块

一、神经网络的前中后期 在神经网络中&#xff0c;特别是在深度卷积神经网络&#xff08;CNN&#xff09;中&#xff0c;“网络早期&#xff08;低层&#xff09;”、“网络中期&#xff08;中层&#xff09;”和“网络后期&#xff08;高层&#xff09;”通常指的是网络结构中…

【云原生】初识Docker,安装以及了解操作命令

一、为什么要使用容器&#xff1f; 背景&#xff1a;以前开发、测试、生产为不同的环境&#xff0c;痛点是发现开发测试以后没问题&#xff0c;但是在生产环境无法运行。给测试、开发、运维人员造成了大量的工作。最终结果是发版更新速度也跟不上&#xff0c;效率低 我认为使…

JAVA 学习 面试(十)枚举、注解、基本原则

枚举 默认继承 java.lang.Enum 类&#xff0c;不能继承其他父类&#xff0c;并自动添加了values&#xff08;获取枚举类中的所有枚举值&#xff09;和valueOf&#xff08;获取对应的枚举类型&#xff09;方法&#xff0c; java.lang.Enum 类实现了 java.lang.Serializable 和 …

翻译: GPT-4 with Vision 升级 Streamlit 应用程序的 7 种方式二

GPT-4 Vision 系列: 翻译: GPT-4 with Vision 升级 Streamlit 应用程序的 7 种方式一 GPT-4 Vision 的 7 个实际用例 Pre-requisites:先决条件&#xff1a; 订阅 ChatGPT Plus 以访问 GPT-4 Vision。如果您不熟悉 Streamlit&#xff0c;请按照安装步骤操作。 1. 绘制您的应…

C++面试:二叉树和红黑树

目录 二叉树 1. 二叉树的定义 2. 二叉树的遍历 3. 二叉树的应用 4. 实现细节 5. C中的实现 面试准备 红黑树 红黑树的原理 红黑树的用途 示例代码 面试准备 1. 红黑树的工作原理及其规则 2. 红黑树的优势及与其他二叉搜索树&#xff08;如AVL树&#xff09;的比较…

尚无忧球馆助教系统源码,助教小程序源码,助教源码,陪练系统源码

特色功能&#xff1a; 不同助教服务类型选择 助教申请&#xff0c;接单&#xff0c;陪练师入住&#xff0c;赚取外快 线下场馆入住 设置自己服务 城市代理 分销商入住 优惠券 技术栈&#xff1a;前端uniapp后端thinkphp 独立全开源

.NET高级面试指南专题一【委托和事件】

在C#中&#xff0c;委托&#xff08;Delegate&#xff09;和事件&#xff08;Event&#xff09;是两个重要的概念&#xff0c;它们通常用于实现事件驱动编程和回调机制。 委托定义&#xff1a; 委托是一个类&#xff0c;它定义了方法的类型&#xff0c;使得可以将方法当作另一个…

pyqt添加菜单栏

参考&#xff1a; https://blog.csdn.net/seniorwizard/article/details/109820641 import sys from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5.QtCore import Qt from PyQt5.QtWidgets import (QApplication, QMainWindow, QMenuBar, QMenu, QAction, QPlainTextEdi…

HarmonyOS鸿蒙ArkTS,封装http网络请求

HarmonyOS鸿蒙ArkTS&#xff0c;封装http网络请求 前提&#xff1a; 要想使用http请求&#xff0c;系统必须要具备ohos.permission.INTERNET权限&#xff0c;在model.json5文件中的module模块下添加如下请求权限&#xff1a; 在module.json5文件中 配置 "requestPermi…

踩坑(6)Redisson调用unlockAsync方法释放锁失败

问题描述 通过redisson的lockAsync异步方法获取到锁之后&#xff0c;再业务执行完成后调用lock.unlockAsync()无法释放当前锁&#xff0c;导致后续的方法被阻塞 public void asyncLock() {RLock lock redissonClient.getLock("asyncLock");RFuture<Void> fut…

LeetCode 热题 100 | 矩阵

目录 1 73. 矩阵置零 2 54. 螺旋矩阵 3 48. 旋转图像 4 240. 搜索二维矩阵 II 菜鸟做题第二周&#xff0c;语言是 C 1 73. 矩阵置零 解题思路&#xff1a; 遍历矩阵&#xff0c;寻找等于 0 的元素&#xff0c;记录对应的行和列将被记录的行的元素全部置 0将被记录的…

k8s 进阶实战笔记 | Scheduler 调度策略总结

文章目录 Scheduler 调度策略总结调度原理和过程调度策略nodeSelect亲和性和反亲和性NodeAffinify亲和验证PodAffinity 亲和验证PodAntiAffinity 反亲和验证污点与容忍跳过 Scheduler 调度策略 调度策略场景总结 Scheduler 调度策略总结 调度原理和过程 Scheduler 一直监听着…

k8s Ingress部署应用

Deployment(部署) Deployment处于master节点&#xff0c;master会选择合适的work节点创建Container Container会被包含在Pod中 通过k8s部署一个nginx kubectl create deployment my-nginx --imagenginx创建一个tomcat 镜像 创建一个tomcat-svc.yaml文件 创建service类型…

【心得】java JNDI配合RMI实现注入个人笔记

目录 JNDI RMI 基本概念 RMI 基本逻辑 恶意利用 JNDI注入RMI实现攻击 JNDI Java Naming and Directory Interface Java 命令和目录接口 让配置参数 和 代码 解耦的规范或者思想 低耦合 高内聚 Name 命名 java对象 通过 命名 绑定到 容器环境 java对象和一个特定的…

Java技术栈 —— Kafka入门(一)

Java技术栈 —— Kafka入门&#xff08;一&#xff09; 一、什么是Kafka&#xff1f;二、如何安装Kafka&#xff1f; 一、什么是Kafka&#xff1f; Kafka是一种消息队列&#xff0c;通过订阅-发布机制可以实现解耦合&#xff0c;用异步处理代替同步处理[1] 。&#xff08;理解这…