LeetCode - #85 最大矩形(Top 100)

news2024/11/19 2:41:08

文章目录

    • 前言
    • 1. 描述
    • 2. 示例
    • 3. 答案
      • 题解 1
      • 题解 2
    • 关于我们

在这里插入图片描述

前言

本题为 LeetCode 前 100 高频题

本题由于没有合适答案为以往遗留问题,最近有时间将以往遗留问题一一完善。

我们社区陆续会将顾毅(Netflix 增长黑客,《iOS 面试之道》作者,ACE 职业健身教练。)的 Swift 算法题题解整理为文字版以方便大家学习与阅读。

LeetCode 算法到目前我们已经更新到 84 期,我们会保持更新时间和进度(周一、周三、周五早上 9:00 发布),每期的内容不多,我们希望大家可以在上班路上阅读,长久积累会有很大提升。

不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。如果大家有建议和意见欢迎在文末留言,我们会尽力满足大家的需求。

难度水平:困难

1. 描述

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

2. 示例

示例 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

提示:

  • rows == matrix.length
  • cols == matrix[0].length
  • 1 <= row, cols <= 200
  • matrix[i][j]'0''1'

3. 答案

题解 1

class Solution {
   func maximalRectangle(_ matrix: [[Character]]) -> Int {
       if matrix.count == 0 || matrix[0].count == 0{
           return 0
       }
       var ans = 0
       var rowArr = Array(repeating:0,count:matrix[0].count + 1)
       for y in stride(from:0,to:matrix.count,by:1) {
           for x in stride(from:0,to:matrix[0].count,by:1) {
               if matrix[y][x] == "1" {
                   rowArr[x] += 1 
               } else {
                   rowArr[x] = 0
               }
           }
           ans = max(ans,getLargetRect(rowArr))
       }
       return ans
   }

   func getLargetRect(_ rowArr:[Int]) -> Int {
       var stack = [Int]()
       var maxArea = 0
       for (index,height) in rowArr.enumerated() {
           while let last = stack.last, rowArr[last] > height {
               stack.removeLast()
               var width = 0
               if stack.isEmpty {
                   width = index
               } else {
                   width = index - stack.last! - 1
               }
               maxArea = max(maxArea, width * rowArr[last] )
           }

           stack.append(index)
       }
       return maxArea
   }
}

题解 2

class Solution {
   func maximalRectangle(_ matrix: [[Character]]) -> Int {
       let n = matrix.count
       guard n > 0 else {
           return 0
       }
       let m = matrix[0].count

       var mark = Array(repeatElement(Array(repeatElement(0, count: m)), count: n))
       for i in (0..<n).reversed() {
           var count = 0
           for j in (0..<m).reversed() {
               if matrix[i][j] == "1" {
                   count += 1
               } else {
                   count = 0
               }
               mark[i][j] = count
           }
       }

       var result = 0
       for i in 0..<n {
           for j in 0..<m {
               var minColumn = m
               var row = i
               while row < n && mark[row][j] != 0 {
                   minColumn = min(minColumn, mark[row][j])
                   result = max(result, (row - i + 1) * minColumn)
                   row += 1
               }
           }
       }
       return result
   }
}

点击前往 LeetCode 练习

关于我们

我们是由 Swift 爱好者共同维护,我们会分享以 Swift 实战、SwiftUI、Swift 基础为核心的技术内容,也整理收集优秀的学习资料。

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

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

相关文章

解密后无法加载到指定模版,且模版名为空

问题如图&#xff1a; 原因&#xff1a;因为改变了项目的集成管理&#xff0c;导致变量丢失

Redis原理 - 五种数据类型的底层结构关系

原文首更地址&#xff0c;阅读效果更佳&#xff01; Redis原理 - 五种数据类型的底层结构关系 | CoderMast编程桅杆https://www.codermast.com/database/redis/base-datatype-implement.html #字符串对象String String 是 Redis 中最常见的数据存储类型。 其基本编码方式是 …

安卓蓝牙SDP协议数据包

1. SDP概念 我们想一想&#xff0c;两个陌生的设备&#xff08;之前未有过交互&#xff09;如何去发现对方支持什么服务呢&#xff1f;比如Host端的Controller怎么知道远程蓝牙设备是蓝牙耳机还是HID遥控器呢&#xff1f;我们需要一种协议&#xff0c;这种协议在蓝牙设备配对成…

Git-Desktop【使用说明】

仓库操作 简单的创建仓库、删除仓库 删除点击 Remove 即可 文件操作 1、提交文件到本地仓库 2、修改文件 Git没有修改文件这一说&#xff0c;它只会再次提交一个新的版本到仓库中&#xff0c;提交修改后的文件其实是在仓库创建了一个新的文件&#xff0c;只不过是一个不同的…

Optano.Modeling 简单教程

前言 在工作中遇到两个需求&#xff0c;将两个数学公式用 .NET 的数学库找到数学公式中某个未知数的最优解&#xff0c;我尝试了几个数学库都没有办法完美解决我的需求&#xff0c;直到找到 Optano.Modeling Optano.Modeling 官网&#xff1a;Optano.Modeling 官网 Optano.Mo…

AI操作视频的工具最新最强集合

AI的进化日新月异&#xff0c;很多之前只是在想象中的操作&#xff0c;已经有很多可以使用AI来完成了。最新的Stable Diffusion,ControlNet,EBsynth有哪些神奇的应用&#xff0c;如何一键替换视频中人物和场景&#xff0c;如何根据文字描述即可生成梦幻视频&#xff1f;我们整理…

DFS/回溯/动态规划算法的融会贯通

学算法认准 labuladong 后台回复课程查看精品课 点击卡片可搜索文章&#x1f447; 在线学习网站&#xff1a; https://labuladong.gitee.io/algo/ 经常有读者后台问我&#xff0c;DFS算法/回溯算法/动态规划算法之间的区别和联系是什么&#xff1f; 对于这个问题&#xff0c;我…

私有化部署的无忧·企业文档2.1.7新版本核心功能介绍

无忧企业文档是一款针对企业用户提供在线文档、协同编辑、知识管理的基础化办公工具&#xff0c;产品采用B/S构架。功能覆盖场景包括&#xff1a;在线文档的私有化部署、团队协同、知识管理、在线文档识别的扩展、文档权限化管理等等场景。本次2.1.7版本更新了以下几个核心功能…

【机器学习】十大算法之一 “线性回归”

作者主页&#xff1a;爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typeblog个…

什么是事件委托

文章目录 导文文章重点具体而言&#xff0c;事件委托包含两个主要角色&#xff1a;通过使用事件委托&#xff0c;可以实现以下优势&#xff1a; 代码示例 导文 事件委托是一种在软件开发中常用的设计模式&#xff0c;用于处理事件和回调函数。它允许一个对象&#xff08;委托对…

数据帧转发过程中IP地址及MAC地址的变化

数据帧在交换机间转发 帧经过交换机时&#xff0c;其源、目标MAC是不会变的。 交换机内部的CPU会在每个端口成功连接时&#xff0c;通过将MAC地址和端口对应&#xff0c;形成一张MAC表。在今后的通讯中&#xff0c;发往该MAC地址的数据包将仅送往其对应的端口&#xff0c;而不…

odoo字段加密以及模糊显示

在信息时代&#xff0c;信息本身是把双刃剑&#xff0c;一方面它服务于我们的生产、生活、使我们受益&#xff1b; 一方面,信息的泄露可能对我们构成巨大的威胁。因此&#xff0c;客观上就需要一种有力的安全措施来保护机密数据不被窃取或篡改 。 数据加密与解密从宏观上讲是非…

[2022]DyOb-SLAM : Dynamic Object Tracking SLAM System

1.作者 Rushmian Annoy Wadud、Wei Sun 2.时间 2022 3.整体架构 DyOb-SLAM是DynaSLAM和VDO-SLAM的结合: 基于先验信息使用Mask RCNN分割出动态目标通过基于光流和场景流的算法对运动目标进行跟踪对静态点进行BA优化 输出&#xff1a; 当前帧显示ORB特征以及Masj信息和对…

探索Zabbix API:企业监控管理工具

新钛云服已累计为您分享754篇技术干货 Zabbix是一种流行的开源监控解决方案&#xff0c;其强大的API功能为用户提供了灵活且可扩展的监控管理能力。本文将介绍Zabbix API的基本概念和用法&#xff0c;以及如何利用API来简化监控配置、数据获取和自动化任务等方面的工作。 在现代…

数据结构 树

树的基本概念 树是一种非线性的数据结构&#xff0c;它由节点&#xff08;node&#xff09;和边&#xff08;edge&#xff09;组成。树的基本概念包括以下要点&#xff1a; 树由一个根节点&#xff08;root&#xff09;开始&#xff0c;根节点没有父节点&#xff0c;它可以有…

华为OD机试之阿里巴巴找黄金(III)(Java源码)

文章目录 阿里巴巴找黄金&#xff08;III&#xff09; 阿里巴巴找黄金&#xff08;III&#xff09; 题目描述 一贫如洗的椎夫阿里巴巴在去砍柴的路上&#xff0c;无意中发现了强盗集团的藏宝地&#xff0c;藏宝地有编号从0~N的箱子&#xff0c;每个箱子上面贴有一个数字。阿里…

Rancher创建arm架构的下游k8s集群

目录 前言添加自定义集群镜像源配置使用支持ARM架构的docker镜像 前言 费了些时间在成功在华为云arm架构的服务器上搭建了k8s集群&#xff0c;期间问题不断&#xff0c;以下是三个关键点&#xff1a; 确保网络能正常拉取所需镜像拉取的镜像需支持arm架构 否则报错&#xff1a…

SOFAStack 的下一个五年

文&#xff5c;宋顺&#xff08;GitHub ID&#xff1a;nobodyiam) SOFAStack 社区开源负责人 蚂蚁集团高级技术专家 本文 3861 字 阅读 11 分钟 #01 回顾开源这五年 回想起 2018 年 4 月 19 日 SOFAStack 首次开源&#xff0c;当时的官宣文章中就提到了我们开源的初心&#xf…

C++——map/mutimap再理解

目录 1. map 1.1 map介绍 1.2 map的构造 1.3 map插入和删除 1.4 map的迭代器 1.5 map[ ]运算符重载 1.6 map的查找find 1.7 map的删除erase 1.8 map的其它函数 1.9 map的总结 2. multimap 2.1 multimap的介绍 2.2 mutimap的使用 1. map 1.1 map介绍 1、map是关联…

多窗口通信

1、基本概念 BroadcastChannel接口代理了一个命名频道&#xff0c;可以让指定 origin 下的任意 browsing context 来订阅它。它允许同源的不同浏览器窗口&#xff0c;Tab 页&#xff0c;frame 或者 iframe 下的不同文档之间相互通信。通过触发一个 message 事件&#xff0c;消…