“最大正方形”

article/2025/10/22 15:24:36

描述

给定一个由'0'和'1'组成的2维矩阵,返回该矩阵中最大的由'1'组成的正方形的面积,输入的矩阵是字符形式而非数字形式。

数据范围:矩阵的长宽满足 0 \le n \le 200≤n≤20,矩阵中的元素属于 {'1','0'}

进阶:空间复杂度 O(n^2)O(n2) , 时间复杂度 O(n^2)O(n2)

示例1

输入:[[1,0,1,0,0],[1,0,1,1,1],[1,1,1,1,1],[1,0,0,1,0]]

返回值:4

示例2

输入:[[1,0,0],[0,0,0],[0,0,0]]

返回值:1

动态规划解决

        这题让求的是由1围成的最大正方形,最容易想到的一种方式就是暴力求解。解决方式就是如果某个位置是1,就以他为正方形左上角,然后沿着右边和下边找最大的正方形,并且还要保证围成的正方形中所有的数字都是1。

        这种虽然容易想到但代码不太好写,并且时间复杂度也比较高。下面我们来看另一种实现方式,使用动态规划来解决。

        定义二维数组dp[m][n],其中dp[i][j]表示的是在矩阵中以坐标(i,j)为右下角的最大正方形边长。如果我们想求dp[i][j],需要判断矩阵中matrix[i][j]的值。

如果matrix[i][j]是0就没法构成正方形,所以dp[i][j]=0。

如果matrix[i][j]是1,说明他可以构成一个正方形,并且这个正方形的边长最小是1。

  • 如果我们想求最大值,还需要判断他左上角的值dp[i-1][j-1],如果dp[i-1][j-1]是0,那么以坐标(i,j)为右下角的最大正方形边长就是1,如下图所示

图片说明

  • 如果左上角的值dp[i-1][j-1]不是0,也就是说他也可以构成正方形,那么以坐标(i,j)为右下角有可能可以构成一个更大的正方形。为啥说是有可能,因为如果我们要确定他能不能构成一个更大的正方形,还要往他的上边和左边找,看下下面的图。

    图片说明

有可能是下面这种情况,就是左边或者上边的某一个高度小于dp[i-1][j-1]的值,要想构成最大的正方形我们只能取最小的。

图片说明

也有可能是下面这种,就是左边和上边的高度都不小于dp[i-1][j-1]的值。

图片说明

所以我们可以得出结论,如果(i,j)是1,那么以他为右下角的最大正方形边长是

{dp[i-1][j-1],上边的高度,左边的高度}这3个中最小的+1。

这里有个问题就是,如果(i,j)是1,我们有必要往他的上边和左边查找吗,很明显没必要,上边可以用dp[i-1][j]来代表,左边可以用dp[i][j-1]来代表。(注意这里dp[i-1][j]并不是上边为1的高度,dp[i-1][j]只会小,不会大,可以想一下为什么可以代表)

所以我们可以找出递推公式

如果坐标(i,j)为0,

则dp[i][j]=0;

如果坐标(i,j)为1,

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

为了防止一些不必要的边界条件判断,我把dp数组的长和宽都增加了1,来看下代码:

class Solution {
public:/*** 最大正方形* @param matrix char字符型vector<vector<>> * @return int整型*/int solve(vector<vector<char> >& matrix) {// write code hereif(matrix.empty()){return 0;}int m = matrix.size();int n = matrix[0].size();vector<vector<int>> dp(m+1, vector<int>(n + 1));int maxSide = 0;//最大正方形的宽for(int i = 1;i <= m; i++){for(int j = 0; j <= n; j++){if(matrix[i - 1][j - 1] == '1'){//递推公式dp[i][j] = min(dp[i-1][j], min(dp[i -1][j - 1], dp[i][j - 1])) + 1;//记录最大的边长maxSide = max(maxSide, dp[i][j]);}}}//返回正方形的面积return maxSide * maxSide;}
}

 


http://chatgpt.dhexx.cn/article/ZqPKrZ2Z.shtml

相关文章

无角正方形的绘制

from turtle import* for i in range(3):pu()fd(50)pd()fd(100)pu()fd(50)lt(90) pu() fd(50) pd() fd(100) done()

图形学中画正方形的几种方式

1&#xff09;利用三角形列绘制一个正方形 顺时针划线&#xff0c;每个点都是单个数据源&#xff0c;只能单词使用。因此两个三角形需要六个点&#xff08;哪怕重合也需要六个点&#xff09; 2&#xff09;利用三角形带绘制一个正方形 四个点可组成两个三角形&#xff0c;第一个…

css画个正方形

css画个正方形 方式1方式2html效果参考 方式1 /* 兼容性好 */ .use-transform {width: 10%;height: 0;padding-bottom: 10%;border: 1px solid #000; }方式2 使用 vw: 为什么不用%&#xff1f; % 是相对于父元素的大小设定的比率&#xff0c;body默认的宽度为视窗的宽度&…

怎么用数学绘图软件制作正方体展开动画?

正方体是一个基本的空间几何图形&#xff0c;也是特殊的几何体&#xff0c;它的每个面都是由正方形组成的&#xff0c;那么如何把正方形展开&#xff0c;它的形状是什么样子的呢&#xff1f;展开的图形是唯一的吗&#xff1f;下面就一起来学习用数学绘图软件制作正方体展开动画…

最大正方形问题

最大正方形问题 作者&#xff1a;Grey 原文地址&#xff1a; 博客园&#xff1a;最大正方形问题 CSDN&#xff1a;最大正方形问题 题目描述 在一个由 ‘0’ 和 ‘1’ 组成的二维矩阵内&#xff0c;找到只包含 ‘1’ 的最大正方形&#xff0c;并返回其面积。 题目链接见&am…

搞懂正方体展开图

正方体的对称性 观察一个正方体的6个面. 这6个面对于正方体来说是对称的, 这里的对称并非几何或视觉上的对称, 而是一种抽象的对称. 换句话说, 为了研究正方体面的性质, 我们可以任意选择一个面, 对于这个指定面的研究结果, 可以复制到其他5个面上. 因为在指定某一个面之前, 这…

RFM模型以及案例

一.RFM模型定义 百度百科定义:**RFM模型是衡量客户价值和客户创利能力的重要工具和手段。在众多的客户关系管理(CRM)的分析模式中&#xff0c;RFM模型是被广泛提到的。该机械模型通过一个客户的近期购买行为、购买的总体频率以及花了多少钱3项指标来描述该客户的价值状况.* *简…

数据分析——RFM模型

目录 一、RFM模型概述R值&#xff1a;最近一次消费&#xff08;Recency&#xff09;F值&#xff1a;消费频率&#xff08;Frequency&#xff09;M值&#xff1a;消费金额&#xff08;Monetary&#xff09; 二、基于RFM模型的实践应用1、基于RFM模型进行客户细分2、通过RFM模型评…

RFM模型与Spark实现

RFM模型与Spark实现 RMF模型什么是RMF模型给R、F、M按价值打分基于RFM模型的用户价值划分 代码实现 RMF模型 什么是RMF模型 R最近一次消费时间&#xff1a;R越小&#xff0c;客户价值越高F消费频率&#xff1a;F值会受到品类的影响&#xff0c;不适合做跨类目比较M消费金额&a…

RFM模型实战

什么是RFM模型 RFM模型是衡量客户价值和客户创利能力的重要工具。该模型通过一个客户的近期购买行为、购买的总体频率&#xff0c;以及花了多少钱三项指标来描述该客户的价值状况。 如何构建RFM模型 最近一次消费 (Recency) 最近一次消费意指上一次购买的时间——用户上一次…

RFM模型总结

RFM模型 1. 什么是RFM模型&#xff1f;2. RFM有什么作用&#xff1f;3. 怎么构建RFM模型 1. 什么是RFM模型&#xff1f; RFM名词解释 R&#xff1a;最近一次消费&#xff08;recency&#xff09; 代表用户距离当前最后一次消费的时间 反向值 R越大 用户价值越低F&#xff1a;消…

tableau-RFM模型

解释 R-最近一次消费&#xff08;Recency&#xff09;&#xff0c;通常影响因素为店铺的记忆强度&#xff0c;接触机会的多少&#xff0c;回购周期等。这个指标会用于决定客户接触策略&#xff0c;接触频次&#xff0c;刺激力度等。 F-消费频率&#xff08;Frequency&#xf…

【笔记】电商RFM模型

一、理论基础 &#xff08;1&#xff09;RFM模型 R&#xff1a;Recency 最近一次购买–付款日期-按照买家昵称 groupby 取付款日期的信息 F&#xff1a;Frequency 购买频次-付款日期-按照买家昵称 groupby 取付款曰期次数 M&#xff1a;Monetary 购买金额-实付金额-按照买家…

RFM模型分析

1.RFM的重要意义 RFM模型是衡量用户价值和用户创利能力的重要工具和手段 通过用户的近期交易行为、交易频次以及交易金额三个指标描述客户价值 指标解释意义 R(Recency) 用户最近一次交易的时间间隔R值越大&#xff0c;表示越久没有发生交易 F(Frequency) 用户在最近一段…

RFM 模型

RFM 模型 顾客价值分析 顾客价值分析 由于激烈的市场竞争&#xff0c;各个公司相继推出了多样灵活的优惠方式来吸引更多的客户。 对一个没有购买力的顾客&#xff0c;你打电话推销优惠活动毫无作用&#xff0c;可一个高价值顾客&#xff0c;会说有优惠活动怎么不通知我呢&…

数据分析八大模型:详解RFM模型

大家好&#xff0c;我是爱学习的小xiong熊妹。 今天跟大家分享的是一个经常被提及&#xff0c;但是价值被严重低估的模型&#xff1a;RFM模型。 一、RFM的基本思路 RFM模型由三个基础指标组成&#xff1a; R&#xff1a;最近一次消费至今的时间 F&#xff1a;一定时间内重复…

线性代数:如何求特征值和特征向量?

一、特征值和特征向量的定义 1 首先让我们来了解一下特征值和特征向量的定义&#xff0c;如下&#xff1a; 2 特征子空间基本定义&#xff0c;如下&#xff1a; END 二、特征多项式 1 特征多项式的定义&#xff0c;如下&#xff1a; 2 推论&#xff1a;n阶方阵A可逆的充…

如何用计算机求特征值特征向量,利用QR算法求解矩阵的特征值和特征向量

利用QR算法求解矩阵的特征值和特征向量 为了求解一般矩阵(不是那种幼稚到shi的2 x 2矩阵)的特征值. 根据定义的话,很可能需要求解高阶方程... 这明显是个坑...高阶方程你肿么破... 折腾了好久 1.我要求特征值和特征向量. 2.找到一种算法QR分解矩阵求解特征值 3.QR矩…

【考研线代】五. 特征值和特征向量

文章目录 第五章 特征值和特征向量5.1 特征值&#xff0c;特征向量5.1.1 概念5.1.2 性质 & 定理 & 推论 ⭐5.1.3 求特征值和特征向量的方法数值型矩阵抽象型矩阵巧解矩阵特征值方法⭐ 5.2 相似矩阵5.2.1 概念5.2.2 性质5.2.3 求可逆矩阵P使得A可相似对角化方法 5.3 实对…

线性代数特征值

特征值的性质&#xff1a; 下面是例题&#xff1a; 要注意单位阵的特征值是替换成1 注意下面两个&#xff1a; 例题5&#xff1a; 仔细看解题过程。 例题6&#xff1a; 运用了特征值相加等于矩阵主对角线元素之和 、特征值相乘等于矩阵的行列式、求特征值的定义。列出以上三…