leetcode(力扣) 221. 最大正方形(动态规划)

news2024/9/22 5:25:07

文章目录

  • 题目描述
  • 思路分析
  • 完整代码

题目描述

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

在这里插入图片描述

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

思路分析

看了一圈题解,解释的都不太清楚。我来写一个。

这题动规。直接步骤开走。

1.确定dp下标含义:

dp[i][j] 表示为 以i和j为右下角的格子可以组成的正方形的最长边长。

2.递推公式:

dp[i][j]=min(dp[i−1][j−1],dp[i−1][j],dp[i][j−1])+1。
含义为若当前位置为111,则此处可以构成的最大正方形的边长,是其正上方,左侧,和左上界三者共同约束的,且为三者中的最小值加1。

看下面这个图帮助理解,假设当前 i j 遍历到最右下角的0的时候,则此时dp[i][j]也就是算上当前这个格子,可以组成的最长边长,即由图中红蓝绿三个矩形来决定的。
也就是说,这三部分联合到一起,再加上当前遍历的右下角这一个小格子,才算是一个新的正方形,这也是为什么要取三者中的min值了,这也意味着,只有三个条件相等,边长才能变大。
在这里插入图片描述

3.初始化:

初始化比较容易,为了考虑一个格子的情况,也就是所给的matrix 数组第一行和第一列的元素,将dp数组进行扩充,扩充一行一列,这样就能清楚的表示所给矩阵第一行和第一列正方形的情况了。

完整代码

class Solution:
    def maximalSquare(self, matrix: List[List[str]]) -> int:
        # dp[i][j] 为 以i和j为右下角的格子可以组成的正方形的最长
        row = len(matrix)+1
        col = len(matrix[0])+1
        res = 0

        dp = [[0 for _ in range(col)] for _ in range(row)]
        

        for i in range(1,row):
            for j in range(1,col):
                if matrix[i-1][j-1] == '1':
                    dp[i][j] = min(dp[i-1][j],dp[i][j-1],dp[i-1][j-1])+1
                res = max(res,dp[i][j])
        return res * res
        ```

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1080367.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SQLAlchemy 使用封装实例

类封装 database.py #! /usr/bin/env python # -*- coding: utf-8 -*-import sys import json import logging from datetime import datetimefrom core.utils import classlock, parse_bool from core.config import (MYSQL_HOST,MYSQL_PORT,MYSQL_USER,MYSQL_PASS,MYSQL_DA…

calc方法和vue中calc不生效踩坑

calc方法 calc()方法是css用来计算的,比如一个场景,上下固定高度,中间自适应,就可以使用这个方法。 预编译less也是可以使用这个方法的 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewp…

AR动态贴纸SDK,让创作更加生动有趣

在当今的社交媒体时代&#xff0c;视频已经成为了人们表达自我、分享生活的重要方式。然而&#xff0c;如何让你的视频在众多的信息中脱颖而出&#xff0c;吸引更多的关注和点赞呢&#xff1f;答案可能就在你的手中——美摄AR动态贴纸SDK。 美摄AR动态贴纸SDK是一款专为视频编辑…

设计模式02———建造者模式 c#

首先我们打开一个项目 在这个初始界面我们需要做一些准备工作 建基础通用包 创建一个Plane 重置后 缩放100倍 加一个颜色 更换天空盒&#xff08;个人喜好&#xff09; 任务&#xff1a;使用【UI】点击生成6种车零件组装不同类型车 【建造者模式】 首先资源商店下载车模型 将C…

C#实现五子棋小游戏:简单、有趣的编程项目

目录 引言什么是五子棋游戏规则开发环境准备安装C#开发环境选择合适的集成开发环境(IDE)游戏设计与功能分析游戏界面设计实现棋盘的绘制与操作实现落子功能实现输赢判断说明引言 什么是五子棋 五子棋是一种源于中国的传统棋类游戏,常见于中国、日本、韩国等亚洲国家,是亚洲…

c++视觉处理-----cv::findContours函数和图像进行去噪、平滑、边缘检测和轮廓检测,动态检测图形

cv::findContours cv::findContours 是OpenCV中用于查找图像中对象轮廓的函数。轮廓是对象的边界&#xff0c;通常用于对象检测、分割和形状分析。cv::findContours 函数的基本用法如下&#xff1a; cv::findContours(image, contours, hierarchy, mode, method, offset cv:…

单细胞分析+实验验证,多重buff加身,学会你也能发7分+。

今天给同学们分享一篇单细胞分析实验验证的生信文章“Construction of a hypoxia-immune-related prognostic panel based on integrated single-cell and bulk RNA sequencing analyses in gastric cancer”&#xff0c;这篇文章于2023年4月26日发表在Front Immunol 期刊上&am…

JUC并发编程(一):Java内存模型(JMM)及三大特性:可见性、有序性、原子性

1.简介 在当今高流量、高并发的互联网业务场景下&#xff0c;并发编程技术显得尤为重要&#xff0c;不管是哪一门编程语言&#xff0c;掌握并发编程技术是个人进阶的必经之路。时隔一个半月没有写技术博客文章&#xff0c;有点生疏了。。。闲话少叙&#xff0c;接下来我将围绕…

在使用nohup命令后台训练pytorch模型时,关闭ssh窗口导致的训练任务失败解决方法

下班前使用终端通过SSH登陆服务器&#xff0c;用nohup命令后台训练了一个pytorch模型。第二天来公司上班发现模型训练终止&#xff0c;报如下问题。 WARNING:torch.distributed.elastic.agent.server.api:Received 1 death signal, shutting down workers WARNING:torch.distr…

2023年陕西省安全员B证证考试题库及陕西省安全员B证试题解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年陕西省安全员B证证考试题库及陕西省安全员B证试题解析是安全生产模拟考试一点通结合&#xff08;安监局&#xff09;特种作业人员操作证考试大纲和&#xff08;质检局&#xff09;特种设备作业人员上岗证考试大…

2023年危险化学品经营单位主要负责人证考试题库及危险化学品经营单位主要负责人试题解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年危险化学品经营单位主要负责人证考试题库及危险化学品经营单位主要负责人试题解析是安全生产模拟考试一点通结合&#xff08;安监局&#xff09;特种作业人员操作证考试大纲和&#xff08;质检局&#xff09;特…

联想携中国移动打造车路协同方案 助力重庆实现32类车联网场景

10月11日&#xff0c;联想集团在中国移动全球合作伙伴大会上首次分享了与中国移动等合作伙伴共同打造的5G车路协同案例——重庆两江协同创新区车路协同应用。联想利用基于5G智能算力技术&#xff0c;在总里程55公里路段实现了32类车联网场景。 据了解&#xff0c;重庆两江协同创…

Spark任务优化分析

一、背景 首先需要掌握 Spark DAG、stage、task的相关概念 Spark的job、stage和task的机制论述 - 知乎 task数量和rdd 分区数相关 二、任务慢的原因分析 找到运行时间比较长的stage 再进去看里面的task 可以看到某个task 读取的数据量明显比其他task 较大。 如果是sql 任…

Python爬虫提高排名

在如今竞争激烈的互联网时代&#xff0c;网站的SEO优化变得尤为重要。而Python爬虫作为一种强大的工具&#xff0c;可以帮助网站主们提升搜索排名&#xff0c;吸引更多的流量和用户。本文将为您揭秘如何利用Python爬虫来改善您的SEO优化&#xff0c;并帮助您提升搜索排名。无论…

线性代数 --- 矩阵的QR分解,A=QR

矩阵的QR分解&#xff0c;格拉姆施密特过程的矩阵表示 首先先简单的回顾一下Gram-Schmidt正交化过程的核心思想&#xff0c;如何把一组线性无关的向量构造成一组标准正交向量&#xff0c;即&#xff0c;如何把矩阵A变成矩阵Q的过程。 给定一组线性无关的向量a,b,c&#xff0c;我…

2023年【危险化学品经营单位主要负责人】模拟考试及危险化学品经营单位主要负责人作业考试题库

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 危险化学品经营单位主要负责人模拟考试是安全生产模拟考试一点通总题库中生成的一套危险化学品经营单位主要负责人作业考试题库&#xff0c;安全生产模拟考试一点通上危险化学品经营单位主要负责人作业手机同步练习。…

支持在线状态检查的仪表板miniboard

什么是 miniboard &#xff1f; miniboard 是带有选项卡和在线状态检查的轻量级仪表板。可以通过 GUI 或 yaml 文件进行配置。 采用 shoutrrr 通知。 什么是 Shoutrrr &#xff1f; Shoutrrr 是一个类似 caronc/apprise 的通知库&#xff0c;支持多种通知服务。 安装 在群晖上…

矿物鉴定VR实践教学平台:打造全新的沉浸式学习体验

在科技的帮助下&#xff0c;我们的学习和培训方式正在发生着深刻的变化。其中&#xff0c;虚拟现实&#xff08;VR&#xff09;技术带来的沉浸式学习体验&#xff0c;为我们提供了一种全新的学习和实践方式。本文将详细介绍一款使用VR技术的教学工具——矿物鉴定VR实践教学平台…

国外无人机蜂群作战样式进展及反蜂群策略研究

源自&#xff1a;现代防御技术 作者&#xff1a;王瑞杰, 王得朝, 丰璐, 赵正党, 陈浙梁 摘 要 科技进步和军事需求的联合推动下&#xff0c;无人机蜂群作战成为一种新兴的并能够改变战争规则的颠覆性作战样式&#xff0c;各军事强国围绕“蜂群技术和战术”展开了激烈的竞争…

[GWCTF 2019]你的名字 - SSTI注入(waf绕过)

[GWCTF 2019]你的名字 1 解题流程1.1 分析1.2 解题 2 思考总结 1 解题流程 1.1 分析 1、页面只有一个输入框&#xff0c;输入什么回显什么 2、根据特性应该是SSTI注入 1.2 解题 fuzz&#xff1a;过滤则长度1512 过滤&#xff1a;{{}}、class、mro、builtins、file、func_gl…