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

leetcode221.最大正方形

最大正方形

可以使用动态规划降低时间复杂度。用 dp(i,j) 表示以 (i,j)为右下角,且只包含 111 的正方形的边长最大值。能计算出所有 dp(i,j)的值,那么其中的最大值即为矩阵中只包含 111 的正方形的边长最大值,其平方即为最大正方形的面积。

如果该位置的值是 0,则 dp(i,j)=0,因为当前位置不可能在由 111 组成的正方形中;

如果该位置的值是 111,则 dp(i,j)的值由其上方、左方和左上方的三个相邻位置的 dp值决定。具体而言,当前位置的元素值等于三个相邻位置的元素中的最小值加 111,状态转移方程如下:

dp(i,j)=min(dp(i−1,j),dp(i−1,j−1),dp(i,j−1))+1
其中1277. 统计全为 1 的正方形子矩阵的官方题解给出了详细的证明。

此外,还需要考虑边界条件。如果 i 和 j中至少有一个为 0,则以位置 (i,j)为右下角的最大正方形的边长只能是 1,因此 dp(i,j)=1。

#include<bits/stdc++.h>
using namespace std;
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public:int maximalSquare(vector<vector<char>>& matrix) {int m = matrix.size();int n = matrix[0].size();int dp[m][n];for (int i = 0; i < m; ++i) {for (int j = 0; j < n; ++j) {dp[i][j] = -1;}}int ans = 0;for (int i = 0; i < m; ++i) {for (int j = 0; j < n; ++j) {if (matrix[i][j] == '0'){dp[i][j] = 0;continue;}if (i == 0 || j == 0){dp[i][j] = 1;}else{dp[i][j] = min(min(dp[i][j - 1], dp[i - 1][j - 1]), dp[i - 1][j]) + 1;}ans = max(ans, dp[i][j]);}}return ans * ans;}
};
//leetcode submit region end(Prohibit modification and deletion)int main(){Solution s;vector<vector<char>> num = {{'1', '0', '1', '0', '0'}, {'1', '0', '1', '1', '1'}, {'1', '1', '1', '1', '1'}, {'1', '0', '0', '1', '0'}};int a = s.maximalSquare(num);cout<<(a);return 0;
}
http://www.lryc.cn/news/195185.html

相关文章:

  • 低代码技术这么香,如何把它的开发特点发挥到极致?
  • drawio简介以及下载安装
  • Sql Server 数据库中的所有已定义的唯一约束 (列名称 合并过了)
  • elasticsearch (六)filebeat 安装学习
  • 算法通关村第一关|青铜|链表笔记
  • 【记录】使用Python读取Tiff图像的几种方法
  • JOSEF约瑟 多档切换式漏电(剩余)继电器JHOK-ZBL1 30/100/300/500mA
  • Linux部署kubeedge 1.4
  • 第一章习题
  • nvm、node、npm解决问题过程记录
  • Linux- DWARF调试文件格式
  • 软件工程第六周
  • node+pm2安装部署
  • 大数据学习(11)-hive on mapreduce详解
  • MyBatis基础之自动映射、映射类型、文件注解双配置
  • 8、docker 安装 nginx
  • 关于Skywalking Agent customize-enhance-trace对应用复杂参数类型取值
  • 手机路径、Windows路径知识及delphiXE跨设备APP自动下载和升级
  • GitLab 502问题解决方案
  • selenium打开火狐浏览器
  • 多标签分类论文笔记 | ML-Decoder: Scalable and Versatile Classification Head
  • 修改http_charfinder.py使能在python311环境中运行
  • 蓝桥杯(跳跃 C++)
  • 08 | Jackson 注解在实体里面如何应用?常见的死循环问题如何解决?
  • JavaScript—获取当前时间 并转化为yyyy-MM-dd hh:mm:ss格式
  • OpenHarmony创新赛丨报名倒计时,超强秘籍带你直通大奖!
  • Linux高性能服务器编程 学习笔记 第十四章 进程池和线程池
  • 微信小程序/vue3/uview-plus form兜底校验
  • Photoshop 2024正式发布!内置最新PS AI,创意填充等功能无限制使用!
  • 芯片学习记录TLP184