当前位置: 首页 > news >正文

【数据结构-二维前缀和】力扣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’

动态规划

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,遍历矩阵所有元素即可。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 18069 x的n次方
  • 【CSS in Depth 2 精译_029】5.2 Grid 网格布局中的网格结构剖析(上)
  • digits Social Login插件 google OAuth 2.0登录 400 redirect_uri_mismatch错误解决
  • Python 从入门到实战14(字符串相关操作)
  • 电源自动测试系统有哪些原理和优势?
  • [综述笔记]Federated learning for medical image analysis: A survey
  • 决策树算法原理
  • 一文彻底了解DNS协议工作原理,恐怕没有比这更通俗易懂的了吧?
  • 1.C++入门1(c++编译过程,命名空间,C++输入输出,缺省参数)
  • es6(1)
  • 如何使用Spoon连接data-integration-server并在服务器上执行转换
  • 使用WordCloud报错‘ImageDraw‘ object has no attribute ‘textbbox‘
  • 2024年一区SCI-极光优化算法 Polar Lights Optimization-附Matlab免费代码
  • opencv的球面投影
  • 基于SpringBoot的大学生创新创业训练项目管理系统
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • Centos6.8 使用rpm安装mysql5.7
  • docker python 配置
  • JavaScript设计模式之工厂模式
  • JDK 6和JDK 7中的substring()方法
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • sublime配置文件
  • Tornado学习笔记(1)
  • Transformer-XL: Unleashing the Potential of Attention Models
  • Webpack 4 学习01(基础配置)
  • 关于字符编码你应该知道的事情
  • 理清楚Vue的结构
  • 力扣(LeetCode)21
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • 【云吞铺子】性能抖动剖析(二)
  • 回归生活:清理微信公众号
  • 我们雇佣了一只大猴子...
  • ​MySQL主从复制一致性检测
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • ​探讨元宇宙和VR虚拟现实之间的区别​
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #git 撤消对文件的更改
  • #include到底该写在哪
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • (1)Android开发优化---------UI优化
  • (4)事件处理——(7)简单事件(Simple events)
  • (补充)IDEA项目结构
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (七)Flink Watermark
  • (四)汇编语言——简单程序
  • (一) springboot详细介绍
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (一一四)第九章编程练习
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (转)树状数组