【LeetCode】221.最大正方形

news/2024/10/18 14:17:57/

221.最大正方形(中等)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. 题解

    • 对于在矩阵内搜索正方形或长方形的题型,一种常见的做法是:定义一个二维 dp 数组,其中 dp[i][j] 表示满足题目条件的、以(i,j)为右下角的正方形或长方形属性。
    • 在本题中,dp[i][j] 表示以(i,j)右下角的全由 1 构成的最大正方形边长
    • 如果 matrix[i][j] == '1' ,那么该位置的正方形边长至少为 1 ,即 dp[i][j] = 1 ,接着考虑它是否能和左边、上边、左上角的元素构成更大的正方形。如果其他三个元素在 matrix 中也都为 1,则说明可以构成更大的正方形。
    • 假设 dp[i][j] = k ,其充分条件是 dp[i-1][j] 、dp[i-1][j-1]、dp[i][j-1] 的值必须都不小于 k -1, 否则 (i,j)位置不可能构成面积为 k2 的正方形。同理,如果这三个值中的最小值为 k-1 ,那么(i,j)位置一定能构成面积为 k2 的正方形。因此边长就可以更新为 dp[i][j] = min(min(dp[i-1][j],dp[i][j-1]), dp[i-1][j-1]) + 1;
  2. 代码

    class Solution {
    public:int maximalSquare(vector<vector<char>>& matrix) {int m = matrix.size(), n = matrix[0].size();int ans = 0;vector<vector<int>> dp(m+1 , vector<int>(n+1, 0));for(int i=0; i<m; ++i){for(int j=0; j<n; ++j){if(matrix[i][j] == '1'){dp[i][j] = 1;if(i>0 && j>0){char x = matrix[i-1][j], y = matrix[i][j-1], l = matrix[i-1][j-1];if(x == '1' && y == '1' && l == '1'){dp[i][j] = min(min(dp[i-1][j],dp[i][j-1]), dp[i-1][j-1]) + 1;}}}ans = max(ans, dp[i][j]);}}return ans * ans;}
    };
  3. 收获

    • 这道题是自己想出来的,一开始想把 dp中的第一行和第一列都置为 0,这样就不用考虑下标越界了,但是发现这样的话,我容易混淆 matrix[i-1][j-1]dp[i][j] ,就还是将 dp 和 matrix 的元素一一对应,然后判断边界是否在合理的范围内。
    • 第二,我将 dp[i][j] 定义为 以(i,j)右下角的全由 1 构成的最大正方形面积,在计算时稍有些繁琐,题解是定义为边长,方便很多。

http://www.ppmy.cn/news/58354.html

相关文章

day11 TCP连接管理与UDP协议

目录 ​编辑 连接的建立——”三次握手” 连接的释放——“四次挥手” 保活计时器 用户数据报协议 UDP​编辑 连接的建立——”三次握手” TCP 建立连接的过程叫做握手。 采用三报文握手&#xff1a;在客户和服务器之间交换三个 TCP 报文段&#xff0c;以防止已失效的连接…

使用pg_basebackup备份

参考文档&#xff1a; http://postgres.cn/docs/14/app-pgbasebackup.html http://postgres.cn/docs/12/runtime-config-wal.html postgres版本 test# select version(); version …

ChatGPT技术原理 第八章:GPT与对话生成

目录 8.1 GPT在对话生成中的应用 8.2 基于GPT的对话生成模型 8.3 对话历史表示方法 8.4 策略学习

C#,生信软件实践(02)——DNA数据库EMBL格式详解及转为FASTA格式文件的源代码

>生信老白写的基础代码.fasta MAYBENOANYUSAGE 1 EMBL 1.1 EMBL组织 欧洲分子生物学实验室EMBL&#xff08;European Molecular Biology Laboratory&#xff09;1974年由欧洲14个国家加上亚洲的以色列共同发起建立&#xff0c;现在由欧洲30个成员国政府支持组成&#xf…

程序员都有哪些就业方向?不是所有人都能去互联网公司的!

程序员有哪些借给方向呢 不是所有人都能进互联网公司 就算你进互联网大厂 具体的工作内容 可能跟你想象的也不一样 今天咱们就聊聊程序员 都有哪些可以选择的方向吧 主要是我是刚才想了想 梳理梳理这个程序员主要就业方向 主要有四个方向 一个是互联网公司 再一个第二个就是软件…

REMIX:重构·连接·进化|徐亚波博士D3大会演讲实录

“欢迎大家和数说故事一起来到新世界&#xff0c;和我们一起&#xff0c;来玩一个AI普适场景的无限游戏。” 在数说故事第六届D3智能营销峰会上&#xff0c;数说故事创始人兼CEO徐亚波博士带来「REMIX——重构连接进化」的主题分享&#xff0c;聚焦“ChatGPT开启的AGI时代有什么…

docker容器:本地私有仓库、harbor私有仓库部署与管理

一、本地私有仓库 1、本地私有仓库简介 docker本地仓库&#xff0c;存放镜像&#xff0c;本地的机器上传和下载&#xff0c;pull/push。 使用私有仓库有许多优点&#xff1a; ①节省网络带宽&#xff0c;针对于每个镜像不用每个人都去中央仓库上面去下载&#xff0c;只需要从…

第二十七章 Unity碰撞体Collision(下)

本章节我们继续研究碰撞体&#xff0c;并且探索一下碰撞体与刚体之间的联系。我们回到之前的工程&#xff0c;然后给我们的紫色球体Sphere1也添加一个刚体组件。如下所示 此时&#xff0c;两个球体都具备了碰撞体和刚体组件。接下来&#xff0c;我们Play运行查看效果 我们发现&…