首页 > 其他分享 >最大正方形(二维dp)

最大正方形(二维dp)

时间:2023-03-09 22:33:57浏览次数:54  
标签:matrix maxSide int 正方形 二维 dp size

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

示例 1:

image

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

image

输入:matrix = [["0","1"],["1","0"]]
输出:1
示例 3:

输入:matrix = [["0"]]
输出:0

题解

可以使用动态规划降低时间复杂度。我们用 \(dp[i][j]\)表示以下标 \(i\) 和 \(j\) 为全部包含“1”的正方形的右下角。则当\(matrix[i][j]==1\)时有状态转移方程:\(dp[i][j] = min(dp[i-1][j], dp[i], [j-1], dp[i-1][j-1])+1\)
当\(matrix[i][j]==0\)时,\(dp[i][j]=0\)
最后,还需考虑边界条件,即当\(i=0\) 或 \(j=0\)时,若 \(matrix[i][j]=1\) ,则 \(dp[i][j]=1\),否则\(dp[i][j]=0\)

class Solution {
public:
    int maximalSquare(vector<vector<char>>& matrix) {
        if (matrix.size() == 0 || matrix[0].size() == 0) {
            return 0;
        }
        int maxSide = 0;
        int rows = matrix.size(), columns = matrix[0].size();
        vector<vector<int>> dp(rows, vector<int>(columns));
        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < columns; j++) {
                if (matrix[i][j] == '1') {
                    if (i == 0 || j == 0) {
                        dp[i][j] = 1;
                    } else {
                        dp[i][j] = min(min(dp[i - 1][j], dp[i][j - 1]), dp[i - 1][j - 1]) + 1;
                    }
                    maxSide = max(maxSide, dp[i][j]);
                }
            }
        }
        int maxSquare = maxSide * maxSide;
        return maxSquare;
    }
};

标签:matrix,maxSide,int,正方形,二维,dp,size
From: https://www.cnblogs.com/parallel-138/p/17201737.html

相关文章

  • VGA、HDMI、DP你都懂吗?显示接口大盘点
    电脑显示器,就像我们人类的眼睛一样,是我们和电脑之间进行信息交流的重要窗口。电脑显示器接口,则好比是我们人类的视神经,承载着传递信息的重要任务。随着科技与硬件的不断发......
  • D. Book of Evil(树的直径+换根dp)
    #include<bits/stdc++.h>#definedebug1(a)cout<<#a<<'='<<a<<endl;#definedebug2(a,b)cout<<#a<<"="<<a<<""<<#b<<"="<&......
  • TCP/UDP
    一、概述接着温顾TCP/UDP UDP(用户数据报):1.无连接2.不可靠传输协议3.传输速率比较快4.首部字段较少5.应用场景......
  • 【DP】LeetCode 剑指 Offer 10- I. 斐波那契数列
    题目链接剑指Offer10-I.斐波那契数列思路递推,思路可以参考剑指Offer10-II.青蛙跳台阶问题代码classSolution{publicintfib(intn){inta......
  • DP练习1题解
    这是2023.3.7DP题单十个题的题解。T1ColoredSubgraphs(CF1796E)简要题意:给定一棵树,你要对树进行链剖分,必须剖成上下竖直的链,求剖后最短链的长度最大值。最小值最大......
  • datahub 采集oracle数据 DPI-1047: Cannot locate a 64-bit Oracle Client library: l
    datahub命令行采集oracle报错如下:datahubingest-coracle.ymlsqlalchemy.exc.DatabaseError:(cx_Oracle.DatabaseError)DPI-1047:Cannotlocatea64-bitOr......
  • C# 监听窗口分辨率/DPI变更
    C#监听窗口分辨率/DPI变更 当程序运行,窗口已经加载后,如果修改屏幕分辨率,会影响窗口的正常显示。举个案例:悬浮窗口,显示在屏幕右下角。当分辨率、文本显示比例变更后......
  • 【数组】LeetCode 剑指 Offer 04. 二维数组中的查找
    题目链接剑指Offer04.二维数组中的查找思路借鉴Krahets大神的思路,将矩阵逆时针旋转45°,可以发现其大小性质类似于二叉搜索树。利用这个性质可以很方便的在搜索过程......
  • MCP2515国产替代DP2515带有SPI 接口的独立CAN 控制器
    DP2515是一款独立控制器局域网络(ControllerAreaNetwork,CAN)协议控制器,完全支持CANV2.0B技术规范。该器件能发送和接收标准和扩展数据帧以及远程帧。DP2515自带的两个验......
  • udp客户端 用不用 bind 的区别
    无连接的socket的客户端和服务端以及面向连接socket的服务端通过调用bind函数来配置本地信息。使用bind函数时,通过将my_addr.sin_port置为0,函数会自动为你选择一个未占用的......