LeetCode 221. 最大正方形

简介: LeetCode 221. 最大正方形

 LeetCode 221. 最大正方形

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

示例 1:

image.gif 编辑
输入:matrix = [["1","0","1","0","0"],["1","0","1","1","1"],["1","1","1","1","1"],["1","0","0","1","0"]]
输出:4

示例 2:

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


思路

参考:LeetCode 视频题解并加以修改:LeetCode官方视频题解

注意:

    • 在递推方程中 d[i][j] 代表的是 以坐标点 (i,j) 为【右下角】的正方形最大边长。
    • 若某格子值为 1,则以此为右下角的正方形的最大边长为:上面的正方形、左面的正方形或左上的正方形中,最小的那个,再加上此格。即:min(上, 左, 左上) + 1


    时间复杂度:O(mn),其中 m 和 n 是矩阵的行数和列数

    空间复杂度:O(mn),其中 m 和 n 是矩阵的行数和列数

    // 参考 LeetCode 视频题解:https://leetcode.cn/problems/maximal-square/solutions/234964/zui-da-zheng-fang-xing-by-leetcode-solution/// 注意在递推方程中:d[i][j] 代表的是 以坐标点(i,j) 为【右下角】的正方形最大边长funcmaximalSquare(matrix [][]byte) int {
    m, n, maxLen :=len(matrix), len(matrix[0]), 0// init dp arraydp :=make([][]int, m)
    fori :=0; i<m; i++ {
    dp[i] =make([]int, n)
        }
    fori :=0; i<m; i++ {
    forj :=0; j<n; j++ {
    ifmatrix[i][j] =='1' {
    // 边界条件处理:自身格子为'1',且位于 第0行/第0列 的dp数组初始化为1ifi==0||j==0 {
    dp[i][j] =1                } else {
    // 以坐标点(i,j) 为【右下角】的正方形最大边长 = min(左, 上, 左上) + 1dp[i][j] =min(dp[i][j-1], dp[i-1][j], dp[i-1][j-1]) +1// +1:右下角的格子本身                }
    ifmaxLen<dp[i][j] {
    maxLen=dp[i][j]
                    }
                }
            }
        }
    returnmaxLen*maxLen}
    funcmin(vals...int) int {
    minVal :=vals[0]
    for_, val :=rangevals {
    ifval<minVal {
    minVal=val        } 
        }
    returnminVal}
    // func min(left, up, leftUp int) int {//     arr := []int{left, up, leftUp}//     sort.Ints(arr)//     return arr[0]// }

    image.gif

    另外附上:自己在LeetCode上写的题解:我的题解

    目录
    相关文章
    |
    5月前
    |
    存储
    leetcode2975. 移除栅栏得到的正方形田地的最大面积
    leetcode2975. 移除栅栏得到的正方形田地的最大面积
    39 1
    |
    5月前
    |
    算法 vr&ar 图形学
    ☆打卡算法☆LeetCode 221. 最大正方形 算法解析
    ☆打卡算法☆LeetCode 221. 最大正方形 算法解析
    |
    2月前
    |
    Python
    【Leetcode刷题Python】473. 火柴拼正方形
    LeetCode题目473的Python编程解决方案,题目要求使用给定长度的火柴棒拼成一个正方形,不能折断火柴棒且每根火柴棒必须使用一次,判断是否能拼成正方形。
    21 2
    |
    5月前
    |
    JavaScript
    【leetcode】221--最大正方形-动态规划法
    【leetcode】221--最大正方形-动态规划法
    26 0
    |
    5月前
    |
    JavaScript
    【leetcode】221. 最大正方形 动态规划法
    【leetcode】221. 最大正方形 动态规划法
    21 0
    |
    5月前
    leetcode-221:最大正方形
    leetcode-221:最大正方形
    42 0
    |
    5月前
    leetcode-593:有效的正方形
    leetcode-593:有效的正方形
    31 0
    |
    5月前
    |
    Go
    golang力扣leetcode 221.最大正方形
    golang力扣leetcode 221.最大正方形
    41 0
    |
    5月前
    leetcode-1725:可以形成最大正方形的矩形数目
    leetcode-1725:可以形成最大正方形的矩形数目
    32 0