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

dp:221. 最大正方形

221. 最大正方形
在这里插入图片描述
看到这个题目真能立马想到dp吗?貌似很难,即使知道是一个dp题也很难想到解法。

直观来看,使用bfs以一个点为中点进行遍历,需要的时间复杂度为 O ( n 2 m 2 ) O(n^2m^2) O(n2m2)

但是可以很容易发现,如果求以一个点为角 构成的最大正方形,可以通过其他周围的点作为角来快速找到这个点的最大正方形。

我们用数组存以该点为右下角,左下角,左上角,右上角的最大正方形,可以通过周围的转移,然后求出以它为“中心”构成的最大正方形。于是有如下代码

class Solution {
public:int maximalSquare(vector<vector<char>>& matrix) {int n = matrix.size();int m = matrix[0].size();if(n == 1 && m == 1) return matrix[0][0];vector<vector<vector<int>>> dp(n, vector<int>(m, vector<int>(4, 0)));int ans = 0;for(int j = 0; j < m; ++ j){dp[0][j][0] = dp[0][j][1]= dp[0][j][2] = dp[0][j][3] = matrix[0][j];}for(int i = 1; i < n - 1; ++ i){dp[i][0][0] = dp[i][0][1] = dp[i][0][2] = dp[i][0][3] = matrix[i][0];for(int j = 1; j < m - 1; ++ j){dp[i][j][0] = min(dp[i - 1][j][0], min(dp[i - 1][j - 1][0], dp[i][j - 1][0])) + 1;dp[i][j][1] = min(dp[i - 1][j][1], min(dp[i - 1][j + 1][1], dp[i][j + 1][1])) + 1;····}//最后一列}//最后一行return ans * ans;}
};

但是实际上,以该点为右下角就足以解决这个问题,因为对于任何一个最大正方形而言,它一定有一个右下角,那么找到这个右下角能构成的最大正方形就是这个正方形了

class Solution {
public:int maximalSquare(vector<vector<char>>& matrix) {int n = matrix.size();int m = matrix[0].size();if(n == 1 && m == 1) return matrix[0][0] - '0';vector<vector<int>> dp(n, vector<int>(m, 0));int ans = 0;for(int i = 0; i < m; ++ i){dp[0][i] = matrix[0][i] - '0';ans = max(ans, dp[0][i]);}for(int i = 1; i < n; ++ i){dp[i][0] = matrix[i][0] - '0';ans = max(ans, dp[i][0]);for(int j = 1; j < m; ++ j){if(matrix[i][j] == '0') dp[i][j] = 0;else dp[i][j] = min(dp[i - 1][j], min(dp[i][j - 1], dp[i - 1][j - 1])) + 1;ans = max(ans, dp[i][j]);}}return ans * ans;}
};
http://www.lryc.cn/news/411729.html

相关文章:

  • 花10分钟写个漂亮的后端API接口模板!
  • 评估分类机器学习模型的指标
  • 农机自动化:现代农业的未来趋势
  • 25考研操作系统复习·1.1/1.2/1.3 操作系统的基本概念/发展历程/运行环境
  • 如何培养学生的创新意识和实践能力
  • 四、GD32 MCU 常见外设介绍(15)CAN 模块介绍
  • AIGC大模型产品经理高频面试大揭秘‼️
  • 【嵌入式笔记】【C语言】struct union
  • 【初学人工智能原理】【9】深度学习:神奇的DeepLearning
  • [RoarCTF 2019]Easy Calc1
  • 安卓APK安装包arm64-v8a、armeabi-v7a、x86、x86_64有何区别?如何选择?
  • 【AI大模型】通义千问:开启语言模型新篇章与Function Call技术的应用探索
  • 详细教程 MySQL 数据库 下载 安装 连接 环境配置 全面
  • 门控循环单元GRU
  • 程序员修炼之路
  • PHP时间相关函数
  • python进阶——python面向对象
  • 【无标题】vue2鼠标悬停(hover)时切换图片
  • 每天一个数据分析题(四百五十九)- 分析法
  • 英语:十、助动词和情态动词
  • DB2-Db2DefaultValueConverter
  • (自适应手机端)行业协会机构网站模板
  • 视频理解调研笔记 | 2021年前视频动作分类发展脉络
  • 怎么通过 ssh 访问远程设备
  • linux Ubuntu 安装mysql-8.0.39 二进制版本
  • ZooKeeper日志自动清理实用脚本
  • KVM+GFS分布式存储系统构建高可用
  • CIFAR-10 数据集图像分类与可视化
  • 没有了高项!!2024软考下半年软考高级哪个最容易考过?
  • 用户自定义Table API Connector(Sources Sinks)