LeetCode221 maximal-square(最大正方形)

题目

Given an m x n binary matrix filled with 0's and 1's, find the largest square containing only 1's and return its area.

 Example 1: 
Input: matrix = [["1","0","1","0","0"],["1","0","1","1","1"],["1","1","1","1",
"1"],["1","0","0","1","0"]]
Output: 4

 Example 2: 
Input: matrix = [["0","1"],["1","0"]]
Output: 1

 Example 3: 
Input: matrix = [["0"]]
Output: 0

 Constraints: 
 m == matrix.length 
 n == matrix[i].length 
 1 <= m, n <= 300 
 matrix[i][j] is '0' or '1'. 

方法

暴力法

遍历矩阵,以遍历的当前点作为矩阵的左上角,往下找为1的矩阵大小

  • 时间复杂度:O()
  • 空间复杂度:O()

动态规划法

dp[i][j]记录的是以[i,j]坐标为右下角的最大的正方形边长,则[i,j]坐标下的值为它的上方、左上方,左边三点的最小值

  • 时间复杂度:O(m*n),m和n分别是矩阵的长和宽
  • 空间复杂度:O(m*n)
class Solution {
    public int maximalSquare(char[][] matrix) {
        int row = matrix.length, col = matrix[0].length;
        int maxSide = 0;
        int[][] dp = new int[row][col];
        for(int i=0;i<row;i++){
            for(int j=0;j<col;j++){
                if(matrix[i][j]=='1'){
                    if(i==0||j==0){
                        dp[i][j] = 1;
                    }else{
                        dp[i][j] = Math.min(Math.min(dp[i-1][j-1],dp[i][j-1]),dp[i-1][j])+1;
                    }
                    maxSide = Math.max(maxSide,dp[i][j]);
                }
            }
        }
        return maxSide*maxSide;
    }
}
posted @   你也要来一颗长颈鹿吗  阅读(16)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示