【数据结构-二维前缀和】力扣221. 最大正方形

news2024/11/15 17:01:07

在一个由 ‘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’

动态规划

class Solution {
public:
    int maximalSquare(vector<vector<char>>& matrix) {
        if(matrix.size() == 0 || matrix[0].size() == 0){
            return 0;
        }
        int maxSide = 0;
        int rows = matrix.size(), columns = matrix[0].size();
        vector<vector<int>> dp(rows, vector<int> (columns));
        for(int i = 0; i < rows; i++){
            for(int j = 0; j < columns; j++){
                if(matrix[i][j] == '1'){
                    if(i==0 || j==0){
                        dp[i][j] = 1;
                    }else{
                        dp[i][j] = min(min(dp[i-1][j], dp[i][j-1]), dp[i-1][j-1]) + 1;
                    }
                }
                maxSide = max(maxSide, dp[i][j]);
            }
        }
        return maxSide * maxSide;
    }
};

时间复杂度:O(mn),其中 m 和 n 是矩阵的行数和列数。需要遍历原始矩阵中的每个元素计算 dp 的值。

空间复杂度:O(mn),其中 m 和 n 是矩阵的行数和列数。创建了一个和原始矩阵大小相同的矩阵 dp。由于状态转移方程中的 dp(i,j) 由其上方、左方和左上方的三个相邻位置的 dp 值决定,因此可以使用两个一维数组进行状态转移,空间复杂度优化至 O(n)。

dp方程看图
在这里插入图片描述
这道题的难点在于找到状态转移方程,首先维护一个dp,他代表的是i,j为右下角的最大正方形。这个最大正方形的最大面积,也就是最大边长,取决于左、上、左上三个dp状态。这要怎么理解呢?实际上之所以取三者最小值+1,是因为计算dp的时候,左边的dp限制了目前i和j的最左边的大小,上方dp限制了上面的范围,左上方dp限制了左上方的范围。

列出动态转换方程后,初始化dp,当i和j为0时候,dp初始化为1,遍历矩阵所有元素即可。

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

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

相关文章

Jupyter Notebook设置代码提示和自动代码补全

算法学习、4对1辅导、论文辅导或核心期刊可以通过公众号滴滴我 文章目录 在使用Jupyter Notebook中&#xff0c;会出现Jupyter不像Pycharm一样&#xff0c;可以 自动补全代码以及 代码方法提示等功能&#xff0c;这时候就需要通过给Jupyter安装插件来进行实现。 执行步骤&#…

刘慈欣:不管未来的技术怎么发展 对文化的冲击肯定会发生

导语 刘慈欣坦承&#xff0c;《三体》里面特别是第一部关于量子的关键描述是错误的&#xff0c;“说量子纠缠能够超高速通讯不太可能&#xff0c;当时也知道不能通讯&#xff0c;但为了这个故事能讲下去就把它写进去了&#xff0c;我没想到在后来有这么大的影响力。”   4月2…

2024年CCPC网络赛C题题解 —— 种树(gym105336C)

一道不错的树形dp题&#xff0c;想要提升树形dp的糕手们可以做一下&#xff0c;放上题面&#xff1a; 题意&#xff1a;给你一个有0有1的数&#xff0c;每次可以把一个大小为3&#xff08;包含3个结点&#xff09;的结构中&#xff0c;要求至少包含一个1&#xff0c;然后就能把…

如何管控即时通讯工具?避免聊天泄密|即时通讯管控五大妙招

在如今的数字化办公环境中&#xff0c;即时通讯工具已经成为了员工之间沟通的必备神器。无论是讨论项目进展&#xff0c;还是快速解决问题&#xff0c;它们都极大地提高了工作效率。但便利的背后&#xff0c;却潜藏着一个巨大的隐患——聊天泄密。要如何在享受高效沟通的同时&a…

SQL server 6.5升级到SQL server 2019

背景&#xff1a; 对日项目&#xff0c;客户的旧系统的数据库用的是SQL server 6.5&#xff0c;操作系统是windows NT。新系统要求升级到SQL server 2019&#xff0c;查了下资料发现旧系统的版本实在是太久远了&#xff0c;90年代的。 数据库部分的升级思路是这样的&#xff…

大学生租房平台:SpringBoot框架的设计与实现

第4章 系统设计 一个成功设计的系统在内容上必定是丰富的&#xff0c;在系统外观或系统功能上必定是对用户友好的。所以为了提升系统的价值&#xff0c;吸引更多的访问者访问系统&#xff0c;以及让来访用户可以花费更多时间停留在系统上&#xff0c;则表明该系统设计得比较专业…

前端使用 Konva 实现可视化设计器(22)- 绘制图形(矩形、直线、折线)

本章分享一下如何使用 Konva 绘制基础图形&#xff1a;矩形、直线、折线&#xff0c;希望大家继续关注和支持哈&#xff01; 请大家动动小手&#xff0c;给我一个免费的 Star 吧~ 大家如果发现了 Bug&#xff0c;欢迎来提 Issue 哟~ github源码 gitee源码 示例地址 矩形 先上效…

RAG 聊天机器人:用 Langchain 和 Streamlit开启与 PDF 的智能对话

与大量 PDF 文档的交互如今变得前所未有地便捷与智能。想象一下,您可以轻松与您的笔记、书籍和各种文档进行无缝对话,不再需要繁琐的手动查找和处理。 这篇文章将带您逐步构建一个基于 Multi-RAG 和 Streamlit 的 Web 应用程序,该应用程序通过 AI 驱动的聊天机器人来读取、…

【Linux 报错】SSH服务器拒绝了密码。请再试一次。(xshell)

出现该错误 可能的原因&#xff1a; 你写入的登录密码错误了&#xff0c;错误原因有&#xff1a; 1、本来输入就错误了 2、创建用户时&#xff0c;只创建了用户名&#xff0c;但密码没有重新设置 3、多人使用同一台服务器时&#xff0c;该服务器管理员&#xff08;本体&#x…

MyEclipse2020安装教程(图文)

本章教程主要记录如何在Windows上安装MyEclipse2020.。 一、下载安装包 通过网盘分享的文件&#xff1a;Myeclipse 2020.rar 链接: https://pan.baidu.com/s/1fD2P0S0GU_zJlUHTPeXP-A?pwdv71m 提取码: v71m 二、安装步骤 1、打开解压后的文件夹&#xff0c;鼠标右击【myeclip…

农产品管理与推荐系统Python+Django网页界面+计算机毕设项目+推荐算法

一、介绍 农产品管理与推荐系统。本系统使用Python作为主要开发语言&#xff0c;前端使用HTML&#xff0c;CSS&#xff0c;BootStrap等技术和框架搭建前端界面&#xff0c;后端使用Django框架处理应用请求&#xff0c;使用Ajax等技术实现前后端的数据通信。实现了一个综合性的…

威胁建模攻击树和攻击库

威胁建模攻击树和攻击库 1.攻击树概述2.创建新的攻击树&#x1f332;3.真实攻击树的案例诈骗攻击树思维导图式SSL风险攻击树 4.攻击库概述5.CAPEC攻击模式6.OWASP 1.攻击树概述 攻击树&#xff08;Attack Tree&#xff09;是一种用于分析和描述系统安全的工具&#xff0c;广泛…

独立产品灵感周刊 DecoHack #067 - 摸鱼神器与AI视频创作工具

本周刊记录有趣好玩的独立产品/设计/开发相关内容&#xff0c;每周一发布&#xff0c;往期内容同样精彩&#xff0c;感兴趣的伙伴可以到官网查看更多内容。可以邮件订阅或RSS订阅本周刊。欢迎通过 Twitter 私信推荐或投稿。 本期内容涵盖从摸鱼神器、AI视频生成&#xff0c;到乐…

【Linux 运维知识】Linux 编译后的内核镜像大小

Linux 内核镜像的大小取决于多个因素&#xff0c;包括内核的版本、启用的功能、模块的数量以及特定的编译配置。 以下是常见情况下不同内核镜像的大小范围&#xff1a; 1. 标准内核镜像大小 压缩后的内核镜像 (vmlinuz)&#xff1a; 压缩后的内核镜像文件&#xff0c;通常位于…

【西电电装实习】4. 无人机系统

文章目录 前言一、定义概念 缩写定义分类 二、性质系统结构 开源平台三、使用步骤总结参考文献 前言 西电电装实习 - 无人机系统 一、定义概念 缩写 定义 无人机&#xff08;Unmanned Aerial Vehicle&#xff0c;UAV&#xff09;&#xff0c;是无人驾驶的飞行器。它利用无…

StarRocks 培训课程重磅上线!专家出品,助你升级打怪不走弯路!

今年已过了大半&#xff0c;大家的学习进度条进展如何&#xff1f;如果你对 StarRocks 的基础知识还有疑惑&#xff0c;或在寻找系统性的学习方法&#xff0c;不必灰心&#xff0c;因为 Rocky 要来助你一臂之力啦&#xff01; &#x1f389; StarRocks Education 上线 值此 S…

LLM的指令微调新发现:不掩蔽指令

最近看到了一篇挺有意思的论文&#xff0c;叫《指令掩蔽下的指令调整》&#xff08;Instruction Tuning With Loss Over Instructions&#xff0c;https://arxiv.org/abs/2405.14394) 。 这篇论文里&#xff0c;研究者们对一个在指令微调中大家普遍接受的做法提出了疑问&#…

2024.9.10营养小题【1】

收获&#xff1a; 1、上图中第一个红框中的内容有所收获&#xff0c;首先是malloc这个函数。 2、*returnSizen*2 这条语句我觉得不存在也不影响解这道题吧&#xff0c;它的作用是给returnSize这个指针指向的那块内存赋值&#xff0c;这个值是不是不给也可以.......

启动程序时遇到0xc000007b应用程序无法正常启动问题

启动程序时遇到0xc000007b应用程序无法正常启动问题 参考链接&#xff1a; 1、https://www.bilibili.com/read/cv16283667/ 一、问题描述&#xff1a; 启动程序时遇到0xc000007b应用程序无法正常启动问题&#xff0c;问题截图如下&#xff1a; 二、问题原因&#xff1a;错误…

芯片IC的热特性和热阻

芯片IC的热特性和热阻 1.概述2.热特性基础3.热阻4.常用的热阻值5.有效散热的经验法则5.1选择合适的封装5.2尽可能大面积的PCB覆铜5.3增加铜厚5.4用散热焊盘和过孔将多层PCB连接5.5结构散热5.6散热片的合理使用5.7不要在散热走线上覆阻焊层 IC 封装的热特性对 IC 应用和可靠性是…