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

news/2024/9/18 13:28:21/ 标签: leetcode, 动态规划, 算法

在一个由 ‘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.ppmy.cn/news/1524132.html

相关文章

Eprime学习【E-basic语言、心理学实验程序设计】

文章目录 Eprime学习心理学实验程序设计的基本框架一、实验设计的基本原则二、实验过程&#xff08;procedure&#xff09;与实验列表&#xff08;list&#xff09;三、心理学实验设计的基本模式四、心理学常用的功能与制作 E-basic语言 Eprime学习 心理学实验程序设计的基本框…

年化12.6%,最大回撤才2.6的债券​轮动策略,卡玛比4.79,稳稳的幸福

原创内容第647篇&#xff0c;专注量化投资、个人成长与财富自由。 昨天复盘星球工作&#xff0c;深刻感受一个词的重要性&#xff1a;专注。 一人企业&#xff0c;也是企业运作的逻辑。只是成本降到最低。要专注。 企业本身也要专注&#xff0c;有所不为&#xff0c;有所必为…

编写Dockerfile第二版

目标 更快的构建速度 更小的Docker镜像大小 更少的Docker镜像层 充分利用镜像缓存 增加Dockerfile可读性 让Docker容器使用起来更简单 总结 编写.dockerignore文件 容器只运行单个应用 将多个RUN指令合并为一个 基础镜像的标签不要用latest 每个RUN指令后删除多余文…

56 - I. 数组中数字出现的次数

comments: true difficulty: 中等 edit_url: https://github.com/doocs/leetcode/edit/main/lcof/%E9%9D%A2%E8%AF%95%E9%A2%9856%20-%20I.%20%E6%95%B0%E7%BB%84%E4%B8%AD%E6%95%B0%E5%AD%97%E5%87%BA%E7%8E%B0%E7%9A%84%E6%AC%A1%E6%95%B0/README.md 面试题 56 - I. 数组中数…

搜维尔科技:ART光学空间定位虚拟交互工业级光学跟踪系统

ART光学空间定位虚拟交互工业级光学跟踪系统 搜维尔科技&#xff1a;ART光学空间定位虚拟交互工业级光学跟踪系统

Facebook如何通过AI改变你的社交体验?

在当今数字化的社交媒体环境中&#xff0c;Facebook作为全球最大的社交平台之一&#xff0c;正在通过引入和优化人工智能&#xff08;AI&#xff09;技术&#xff0c;改变用户的社交体验。人工智能不仅帮助Facebook增强了内容推荐和信息过滤的精准度&#xff0c;还让平台具备了…

STM32F1 HAL库笔记1_HAL 驱动程序概述(2)

1、LL驱动程序概述 LL驱动程序旨在提供快速、轻量级、面向专家的层&#xff0c;它比 HAL 更接近硬件。与 HAL 相反&#xff0c;LL API 不适用于以下外设&#xff1a;不需要代码优化的外设&#xff0c;软件配置复杂的外设&#xff0c;复杂的上层堆栈&#xff08;如 USB&…

第146天:内网安全-Web权限维持各语言内存马Servlet-api类Spring类Agent类

目录 前置知识及资源 案例一&#xff1a; 权限维持-Web-内存马-PHP 案例二&#xff1a; 权限维持-Web-内存马-Python 案例三&#xff1a; 权限维持-Web-内存马-JAVA 案例四&#xff1a; 权限维持-Web-内存马-哥斯拉&冰蝎 哥斯拉 ​编辑 冰蝎 前置知识及资源 什么是…

Lvgl8.3 自定义矩形按键的标签,图标 lv_btnmatrix

效果图 主要实现自定义标签/图标,位置,字体可以随意修改 /*** brief 事件回调函数** param e*/ static void event_cb(lv_event_t *e) {lv_event_code_t code lv_event_get_code(e);lv_obj_t *obj lv_event_get_target(e);// 按键点击事件if (code LV_EVENT_VALUE_CHANGED…

计算机网络 第三章: 差错检测

文章目录 1. 误码的相关概念2. 奇偶校验2.1 定义2.2 奇偶校验在实践中的应用 3. 循环冗余校验3.1 循环冗余校验CRC的基本思想3.2 发送方CRC操作3.3 接受方CRC操作 4. 习题5. 解答 1. 误码的相关概念 实际的通信链路都不是理想的&#xff0c;比特在传输过程中可能会产生差错&am…

一句话描述设计模式

最近在看设计模式&#xff0c;其描述抽象程度令人欲罢不能&#xff0c;始终不得其意。于是尝试用一句话总结了一下&#xff0c;常规的就不说了&#xff0c;只是举了个例子。 单例模式 Spring中的单例bean使用了双重锁机制 工厂模式 Spring中的BeanFactory是简单工厂模式Bea…

vscode ros代码调试

vscode默认已经安装好。 1. 编译工程 编译选项为Debug&#xff0c;如果原始CMakeList.txt中有set(CMAKE_BUILD_TYPE Release)&#xff0c;要注释掉。 cd catkin_wscatkin_make -DCMAKE_BUILD_TYPEDebug 2. 进入工作空间 3. 下载ROS插件 4. debug文件自动配置&#xff08;la…

非高峰期我

四. 布局高级 今日核心&#xff1a; 线性布局 Flex 布局 线性布局 线性布局&#xff08;LinearLayout&#xff09;是开发中最常用的布局&#xff0c;通过线性容器 Row 和 Column 构建。Column容器内子元素按照垂直方向排列&#xff0c;Row容器内子元素按照水平方向排列。根据不…

物联网——USART协议

接口 串口通信 硬件电路 电平标准 串口参数、时序 USART USART主要框图 TXE: 判断发送寄存器是否为空 RXNE: 判断接收寄存器是否非空 RTS为输出信号&#xff0c;用于表示MCU串口是否准备好接收数据&#xff0c;若输出信号为低电平&#xff0c;则说明MCU串口可以接收数据&#…

关于武汉芯景科技有限公司的IIC缓冲器芯片XJ4307开发指南(兼容LTC4307)

一、芯片引脚介绍 1.芯片引脚 2.引脚描述 二、系统结构图 三、功能描述 1.总线超时&#xff0c;自动断开连接 当 SDAOUT 或 SCLOUT 为低电平时&#xff0c;将启动内部定时器。定时器仅在相应输入变为高电平时重置。如果在 30ms &#xff08;典型值&#xff09; 内没有变为高…

windows10下本机FTP服务搭建教程

文章目录 前言一、FTP服务器简介二、开启FTP服务站点&#xff08;所有用户可访问&#xff09;1.安装FTP服务2.配置FTP服务器3.本机访问ftp服务 三、开启FTP服务站点&#xff08;指定用户可访问&#xff09;1.创建本地用户2.添加FTP站点3.本机访问ftp服务 总结 前言 ftp服务器主…

富格林:告知安全策略躲避欺诈

富格林指出&#xff0c;作为黄金投资中的一种线上投资方式&#xff0c;现货黄金的交易优势提供了更多的获利机会。成功的投资者需要具备一定的安全交易技巧和规避欺诈的风险意识&#xff0c;以免在黄金投资过程中遭遇欺诈操作安全受损。为了帮助大家安全规避欺诈&#xff0c;接…

Meme“淘金”热潮下:Meme发射平台的安全风险分析

2023年&#xff0c;Meme赛道成为加密市场和各大公链生态的重点关注板块之一&#xff0c;尤其是在Solana等公链上&#xff0c;Meme代币迎来了爆发。许多Meme代币的交易量飙升&#xff0c;年初Solana生态中的Meme代币交易额甚至达到百亿美元。乘着Meme代币的东风&#xff0c;Meme…

db.fsyncLock() 和 db.fsyncUnlock()

命令解释 在MongoDB中&#xff0c;db.fsyncLock()命令用于锁定数据库&#xff0c;以便进行备份操作。执行此命令后&#xff0c;数据库将不允许写操作&#xff0c;直到执行db.fsyncUnlock()命令解锁数据库。 要检查数据库是否被fsyncLock锁定&#xff0c;您可以使用以下方法&a…

【数据结构-一维差分】力扣2848. 与车相交的点

给你一个下标从 0 开始的二维整数数组 nums 表示汽车停放在数轴上的坐标。对于任意下标 i&#xff0c;nums[i] [starti, endi] &#xff0c;其中 starti 是第 i 辆车的起点&#xff0c;endi 是第 i 辆车的终点。 返回数轴上被车 任意部分 覆盖的整数点的数目。 示例 1&#…