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

【算法题】221. 最大正方形-力扣(LeetCode)

【算法题】221. 最大正方形-力扣(LeetCode)

1.题目

下方是力扣官方题目的地址

221. 最大正方形

在一个由 '0''1' 组成的二维矩阵内,找到只包含 '1' 的最大正方形,并返回其面积。

示例 1:

img

输入:matrix = [["1","0","1","0","0"],["1","0","1","1","1"],["1","1","1","1","1"],["1","0","0","1","0"]]
输出:4

示例 2:

img

输入: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'

2.题解

思路

这题可以用动态规划来解决

这题的关键在于正确找到dp数组所代表的意义

一般的思路是想到用dp[i] [j]来表示这个区域中的最大正方形的边长。

不过我们仔细一想,这样子很难用动态规划来解决该问题。

所以我们不妨换个思路:

用dp[i] [j]代表以 (i,j) 为右下角,且只包含 1 的正方形的边长最大值。然后在dp[i] [j]中找到的最大值就是最大边长。

如果matrix[i] [j]=0的话,那么dp[i] [j] 为0;如果为1的话,那么至少也是1。至于能不能变大,就得向左上角扩伸。能够扩伸的前提是三个方向都需要能够扩伸,所以我们得取三个方向的dp的最小值,再加上一个1。

所以我们就可以得出状态转移方程:

dp[i][j]+=min(dp[i-1][j],dp[i][j-1],dp[i-1][j-1])+1

得出了转移方程,再考虑一些特殊值,这题 就可以解决了

Python代码

class Solution(object):
    def countSquares(self, matrix):
        """
        :type matrix: List[List[int]]
        :rtype: int
        """
        n=len(matrix)
        m=len(matrix[0])
        ans=0
        dp=[[0]*m for _ in range(n)]
        for i in range(n):
            for j in range(m):
                if matrix[i][j]==1:
                    if i==0 or j==0:dp[i][j]=1  # 给特殊位置的“1”赋值
                    else:dp[i][j]+=min(dp[i-1][j],dp[i][j-1],dp[i-1][j-1])+1 # 正常位置的直接利用状态转移方程
                    ans+=dp[i][j]
        return ans

3.结语

本人资历尚浅,发博客主要是记录与学习,欢迎大佬们批评指教!大家也可以在评论区多多交流,相互学习,共同成长。


http://www.kler.cn/news/324187.html

相关文章:

  • 【Verilog学习日常】—牛客网刷题—Verilog企业真题—VL66
  • 负载均衡--会话保持失败原因及解决方案(五)
  • 鸿蒙harmonyos next纯flutter开发环境搭建
  • HTML基础用法介绍二
  • Goland使用SSH远程Linux进行断点调试 (兼容私有库)
  • Leetcode基础算法篇|202409(4)贪心算法
  • MySQL数据库修改authentication_string字段为显示密码后无法登录
  • oracle 如何判断当前时间在27号到当月月底
  • [JavaEE] HTTP/HTTPS
  • 2024中国新能源汽车零部件交易会,开源网安展示了什么?
  • Tomcat安装和配置教程(图文详解,最简洁易懂)
  • 【优选算法】(第七篇)
  • Python 算法交易实验89 QTV200日常推进-模式思考
  • SQL:如果字段需要排除某个值但又有空值时,不能直接用“<>”或not in
  • 万字长文理解无界队列和有界队列和适用场景
  • 《自控》误差传递函数、稳态误差、0型、I型、II型系统
  • 从零开始Ubuntu24.04上Docker构建自动化部署(五)Docker安装jenkins
  • TypeScript 设计模式之【策略模式】
  • PHP Session扩展默认session数据储存在哪里
  • 3. 轴指令(omron 机器自动化控制器)——>MC_MoveFeed
  • IDEA开发SpringBoot项目基础入门教程。包括Spring Boot简介、IDEA创建相关工程及工程结构介绍、书写配置文件、Bean对象管理等内容
  • 【教学类-18-04】20240508《蒙德里安“黑白格子画” 七款图案挑选》
  • [大语言模型-论文精读] 词性对抗性攻击:文本到图像生成的实证研究
  • 基于VUE的在线手办交易平台购物网站前后端分离系统设计与实现
  • 在矩池云使用 Llama-3.2-11B-Vision 详细指南
  • vxe-table制作高亮刷新功能
  • C#源码安装ZedGraph组件,并且立即演示使用
  • 代码随想录训练营第46天|回文子序列
  • 高通Camx-内存池架构/ImageBuffer
  • Linux进程的学习(持续更新)