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

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;}
};

http://www.xdnf.cn/news/14637.html

相关文章:

  • SpringCloud系列(37)--搭建SpringCloud Gateway
  • MySQL为什么默认引擎是InnoDB?
  • 深度学习入门--(二)感知机
  • 微信小程序中scss、ts、wxml
  • DEAPDataset的EEG脑电图数据(Emotion_Prediction)使用介绍【第一期】
  • 【请关注】实操mongodb集群部署
  • APISIX
  • 鸿蒙Next仓颉开发语言中的数据类型总结分享
  • Spring 容器核心扩展实战:Spring Boot中三大扩展问题解析
  • sql格式化自动识别SQL语法结构
  • 大塘至浦北高速:解锁分布式光伏“交能融合”密码,引领绿色交通革命
  • 掌握CIS基准合规性:通过自动化简化网络安全
  • 磐维数据库PanWeiDB V2.0-S3.1.1_B01集中式一主二备安装
  • 细谈QT信号与槽机制
  • 覆盖迁移工具选型、增量同步策略与数据一致性校验
  • Unity3D仿星露谷物语开发70之背景音乐
  • 内存泄漏和内存溢出的区别
  • 【机器学习深度学习】非线性激活函数
  • Linux零基础快速入门到精通
  • 学习记录:DAY33
  • 2025.6.24总结
  • 用 Python 打造立体数据世界:3D 堆叠条形图绘制全解析
  • HTML炫酷烟花
  • 微算法科技开发基于布尔函数平方和表示形式的最优精确量子查询算法
  • NLP基础1_word-embedding
  • 利用大型语言模型增强边缘云 AI 系统安全性
  • AI智能化高效办公:WPS AI全场景深度应用指南
  • qt常用控件--03
  • 重点解析(软件工程)
  • 从零学习linux(2)——管理