LeetCode 221. 最大正方形

news2024/12/23 14:24:33

LeetCode 221. 最大正方形

在一个由 '0' 和 '1' 组成的二维矩阵内,找到只包含 '1' 的最大正方形,并返回其面积。

示例 1:

输入:matrix = [["1","0","1","0","0"],["1","0","1","1","1"],["1","1","1","1","1"],["1","0","0","1","0"]]
输出:4

示例 2:

输入:matrix = [["0","1"],["1","0"]]
输出:1

示例 3:

输入:matrix = [["0"]]
输出:0

提示:

  • m == matrix.length
  • n == matrix[i].length
  • 1 <= m, n <= 300
  • matrix[i][j] 为 '0' 或 '1'

思路

参考:LeetCode 视频题解并加以修改:LeetCode官方视频题解

注意:

  • 在递推方程中 d[i][j] 代表的是 以坐标点 (i,j) 为【右下角】的正方形最大边长。
  • 若某格子值为 1,则以此为右下角的正方形的最大边长为:上面的正方形、左面的正方形或左上的正方形中,最小的那个,再加上此格。即:min(上, 左, 左上) + 1

时间复杂度:O(mn),其中 m 和 n 是矩阵的行数和列数

空间复杂度:O(mn),其中 m 和 n 是矩阵的行数和列数

func maximalSquare(matrix [][]byte) int {
    m, n, maxLen := len(matrix), len(matrix[0]), 0
    
    // init dp array
    dp := make([][]int, m)
    for i := 0; i < m; i++ {
        dp[i] = make([]int, n)
    }

    for i := 0; i < m; i++ {
        for j := 0; j < n; j++ {
            if matrix[i][j] == '1' {
                // 边界条件处理:自身格子为1的前提下,判断是否是第0行或第0列,避免越界
                if i == 0 || j == 0 {
                    dp[i][j] = 1
                } else {
                    // 以坐标点(i,j) 为【右下角】的正方形最大边长 = min(上, 左, 左上) + 1
                    dp[i][j] = min(dp[i][j-1], dp[i-1][j], dp[i-1][j-1]) + 1 // +1:右下角的格子本身
                }

                if maxLen < dp[i][j] {
                    maxLen = dp[i][j]
                }
            }
        }
    }

    return maxLen*maxLen
}

func min(vals ... int) int {
    minVal := vals[0]
    for _, val := range vals {
        if val < minVal {
            minVal = val
        } 
    }
    return minVal
}

// func min(left, up, leftUp int) int {
//     arr := []int{left, up, leftUp}
//     sort.Ints(arr)
//     return arr[0]
// }

另外附上:自己在LeetCode上写的题解:我的题解

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

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

相关文章

【OpenCV-Python】教程:8-1 图像去噪 Image Denoising

OpenCV Python 图像去噪 Image Denoising 【目标】 非局部均值去噪算法去除图像中的噪声。 cv2.fastNlMeansDenoising() , cv2.fastNlMeansDenoisingColored() etc. 【理论】 在前面的章节中&#xff0c;我们已经看到了许多图像平滑技术&#xff0c;如高斯模糊&#xff0c…

1、MYSQL基础(DDL DML DCL)

&#xff08;1&#xff09;关于字段修改 change和modify的异同&#xff1a; 同&#xff1a;可以修改表的定义 异&#xff1a;change需要写两次列名&#xff0c;不方便&#xff0c;但是change可以修改表名&#xff0c;modify不可 &#xff08;2&#xff09;多表更新&#xff…

店铺如何快速实现数字化管理?不妨参考一下管理系统

百数店铺管理系统主要是以门店管理为核心&#xff0c;该应用管理涵盖商品、订单、库存、客户、采购、财务、营销等功能体系&#xff0c;维度数据分析&#xff0c;智能指导门店经营&#xff0c;账目清晰一目了然&#xff0c;店铺经营更高效。 1、销售看板 该分析报表里通过销售…

手把手教你玩转 Excel 数据透视表

1. 什么是数据透视表 数据透视表是一种可以快速汇总、分析大量数据表格的交互式分析工具。使用数据透视表可以按照数据表格的不同字段从多个角度进行透视&#xff0c;并建立交叉表格&#xff0c;用以查看数据表格不同层面的汇总信息、分析结果以及摘要数据。 使用数据透视表…

【Vue + Koa 前后端分离项目实战6】使用开源框架==>快速搭建后台管理系统 -- part6 前端实现期刊列表管理【增删查改】

要把努力当成一种习惯&#xff0c;而不是一时热血。 对应后端部分章节回顾&#xff1a; 【Vue Koa 前后端分离项目实战4】使用开源框架&#xff1e;快速搭建后台管理系统 -- part4 后端实现【增删改查】功能_小白Rachel的博客-CSDN博客 目录 一、前端项目准备 1.运行项目 …

支持百问网T113 D1-H D1s V853 V851s 等开发板 使用 Tina Linux NOR Flash文件系统 开发指南

此文章内容适用于 百问网T113 D1-H D1s V853 V851s 等开发板&#xff0c;开发板详情请访问 www.100ask.net 。 1 简介 编写目的 此文档描述Sunxi NOR 模块的使用方法&#xff0c;为相关人员调试提供指导 适用范围 boot0: 适用于brandy-2.0u-boot: 适用于u-boot-2018kernel: …

记录内值排序

记录内值排序 【问题】 could anyone please suggest a way to accomplish this. i have a table which consists of six columns : Table name : orders num1 number, num2 number , num3 number , num4 number , num5 number , num6 number there is a routine which fi…

修改后的代码只进行了git add操作不小心给他恢复了怎么找回来

一份干净的代码在main.js里加了一行console.log(666)&#xff0c;并且只进行了git add 然后不小心给他reset了&#xff01; git reset --hard哦豁&#xff0c;没了&#xff1f; 别急一样可以恢复&#xff0c;我们先执行 git fsck --lost-found然后我们去项目的.git下找到这个…

初级软件测试面试会问什么 除了常见问题,技术题也是重点

众所周知&#xff0c;面试是我们进入一个公司的门槛&#xff0c;面试者只有通过了面试才能进入公司&#xff0c;因此&#xff0c;很多新手测试人就想要知道&#xff0c;自己去面试初级软件测试的岗位&#xff0c;HR们都会问些什么样的问题&#xff1f;自己可以从哪些方面做准备…

多线程顺序运行的 4 种方法

1、在子线程中通过join()方法指定顺序 通过join()方法使当前线程“阻塞”&#xff0c;等待指定线程执行完毕后继续执行。 举例&#xff1a;在线程thread2中&#xff0c;加上一句thread1.join()&#xff0c;其意义在于&#xff0c;当前线程2运行到此行代码时会进入阻塞状态&…

FineReport填报报表常用属性方法

1、去除填报页面选中单元格时的黑色边框 // 加载结束事件 _g().curLGP.hideSelectFrame(); 2、 获取单元格焦点 预览填报报表时&#xff0c;希望页面加载完成后&#xff0c;自动将光标定位在某个控件中&#xff0c;可以直接编辑。 // 获取A2单元格 var cell _g().curLGP.getT…

风控模型算法

目录1 蚂蚁金服2 陆金所3 京东金融4 苏宁金融5 百度金融6 腾讯理财通7 宜信8 钱大掌柜9 万达金融10 网易理财11 美团金融主要是整理目前市面上的风控模型以及风控算法。1 蚂蚁金服 &#xff08;1&#xff09;对接第三方征信公司芝麻信用分&#xff0c;通过用户信用历史、行为偏…

echarts的xAxis和yAxis——x轴y轴以及网格线的详细配置

先看一下xAxis和yAxis配置的图表效果 下图详细的标注了图表中x轴y轴可见的内容 说明一下&#xff1a; x轴y轴在echarts配置项里&#xff0c;从内容上来说大体上没有太大区别&#xff0c;x轴能用的配置项y轴基本也可以用。 通过配置xAxis和yAxis可实现内容 坐标轴箭头的样式&…

Python量化交易01——构建基础策略

参考书目:深入浅出Python量化交易实战 量化交易是很早就想开的栏目了&#xff0c;之前没时间。现在正好放寒假&#xff0c;然后也找到了一本合适的书可以进行学习。 本次第一章就介绍一下简单的量化流程和一个简单的策略。 量化交易顾名思义就是用代码去验证交易策略是否赚钱…

【正点原子I.MX6U-MINI移植篇】Ubuntu-base根文件系统移植构建过程详解(四)

摘要&#xff1a;能不能在ARM板上运行Ubuntu呢&#xff1f;答案肯定是可以的&#xff0c;Ubuntu是Linux系统的一种&#xff0c;可以简单的将Ubuntu理解为一个根文件系统&#xff0c;和我们用busybox、buildroot制作的根文件系统一样。因此移植Ubuntu也就是将Ubuntu根文件系统移…

边缘计算概述

引用李开复在《ai 未来》书中说的&#xff0c;未来ai将会是中美双雄争霸的天下&#xff0c;美国虽然拥有创新的ai技术&#xff0c;重于开发&#xff0c;但现在ai已经到了可以实现落地到社会各个方面了&#xff0c;既然要落地就需要大量的测试和数据&#xff0c;只有中国的市场&…

我要是在学习 C 语言之前知道这些就好了

学习 C 语言好难啊。这门语言本身的基础知识并不是很难&#xff0c;但是“用 C 语言编程”需要用到各种知识&#xff0c;这些知识可没有那么容易掌握&#xff1a; C 语言在各个平台和操作系统上的行为有所差异&#xff0c;因此你需要了解平台&#xff1b; C 语言有许多编译器选…

SpringCloud+SpringCloud Alibaba(尚硅谷2020版)

文章目录1.传统单体架构和微服务架构的对比1.1传统单体架构1.1.1传统单体架构概述1.1.2单体架构的特点1.1.3单体架构的优点1.1.4单体架构的缺点1.2微服务架构1.2.1微服务架构概述1.2.2微服务架构的特点1.2.3微服务架构的优点1.2.4微服务架构的缺点2.SpringCloud简介3.SpringClo…

Service入门

Service入门 1.什么是Service 1.1手机中的Service案例 1.2为什么会有service&#xff1f; 由于手机的原因一个时刻只允许一个激活状态的Activity&#xff0c;其余的处于未激活 后台服务机制应运而生 1.3Service简介 四大组件之一没有UI界面&#xff0c;后台服务&#xff0c;长时…

Word处理控件Aspose.Words功能演示:在 Python 中将 Markdown 转换为 PDF

Aspose.Words 是一种高级Word文档处理API&#xff0c;用于执行各种文档管理和操作任务。API支持生成&#xff0c;修改&#xff0c;转换&#xff0c;呈现和打印文档&#xff0c;而无需在跨平台应用程序中直接使用Microsoft Word。此外&#xff0c; Aspose API支持流行文件格式处…