当前位置: 首页 > 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'

思路

因为题中要求在0和1组成的矩阵中找最大全1正方形,所以我们可以通过统计正方形的边来确定。dp[i][j]是以(i,j)为右下角的最大正方形边长。若当前元素是1,分两种情况:如果在最上方或最左方,边长为1;否则,边长由上方、左方、左上方的最大正方形边长值决定,因为正方形边长受限于最短边,所以取三者最小值加1(正方形的四条边必须相等,所以只能取最短的那条边加 1)。遍历矩阵时记录最大边长。

代码

class Solution {
public:int maximalSquare(vector<vector<char>>& matrix) {int n=0;//最大正方形的边长int h=matrix.size(),l=matrix[0].size();//行数和列数vector<vector<int>> dp(h,vector<int> (l));//统计每个位置能构成正方形的最大边for(int i=0;i<h;i++){for(int j=0;j<l;j++){if(matrix[i][j]=='1'){if(i==0||j==0)//最左边和最上边的格子{dp[i][j]=1;//当前位置能构成的最大正方形边长为1}else{
//最大正方形边长,取决于上方、左方和左上方三个相邻位置能构成的正方形边长的最小值加1dp[i][j]=min(min(dp[i-1][j],dp[i][j-1]),dp[i-1][j-1])+1;}n=max(n,dp[i][j]);//最大边}}}return n*n;}
};

相关文章:

  • 企业免费网站系统下载地址上海网络推广需要多少
  • 怎么建企业自己的网站吗ip营销的概念
  • 政府网站建设长沙百度贴吧的互动社区
  • 网站开发功能表百度查询入口
  • 怎样自己做网站模板关键词搜索量全网查询
  • 手机本地建WordPress网站优化+山东
  • webpack5 css-loader 配置项中的modules
  • 物流涂层科技赋能仓储:创冷科技引领高温环境下的仓储物流安全升级
  • iClone 中创建的面部动画导入 Daz 3D
  • 鸿蒙应用开发中的数据存储:SQLite与Preferences全面解析
  • RabbitMq中使用自定义的线程池
  • 商务年度总结汇报PPT模版分享
  • 银河麒麟高级服务器操作系统(全架构)OpenGauss 数据库部署手册
  • 从零开始的云计算生活——第二十三天,稍作休息,Tomcat
  • Docker快速入门上手教程(保姆式),含docker所有常用命令大全(详细)!
  • Go 语言并发模式实践
  • 【Pandas】pandas DataFrame asof
  • 大语言模型的通用局限性与全球技术演进
  • 华为运维工程师面试题(英语试题,内部资料)
  • 融云在华为开发者大会分享智能办公平台的鸿蒙化探索实践
  • 【西门子OPcenter 2401】中文包导入
  • Wpf的Binding
  • IBMS 智能化系统:让建筑提前进入 AIoT 智慧纪元​
  • 在 GitLab CI 中配置多任务
  • 康谋方案 | ARXML 规则下 ECU 总线通讯与 ADTF 测试方案
  • MicroPython网络编程:AP模式与STA模式详解