Leetcode 最大正方形

java 实现

java 复制代码
class Solution {
    public int maximalSquare(char[][] matrix) {
        //处理特殊情况
        if(matrix == null || matrix.length == 0 || matrix[0].length == 0) return 0;

        int rows = matrix.length;
        int cols = matrix[0].length;
        int[][] dp = new int[rows][cols]; //dp[i][j]的含义是以i,j为右下角的最大正方形边长
        int maxSide = 0; //maxSide是最大边长

        //遍历矩阵
        for(int i = 0; i < rows; i++) {
            for(int j = 0; j < cols; j++) {
                if(matrix[i][j] == '1') {
                    if(i == 0 || j== 0) {
                        dp[i][j] = 1; //第一行或第一列元素所能组成的最大正方形边长只能是1
                    } else {
                        //以当前位置为右下角的最大正方形边长可以通过当前位置左方,上方,左上方这三个位置为右下角的
                        //最大正方形边长的最小值来确定
                        dp[i][j] = Math.min(Math.min(dp[i - 1][j], dp[i][j - 1]), dp[i - 1][j - 1]) + 1;
                    }
                    // 更新最大边长
                    maxSide = Math.max(maxSide, dp[i][j]);
                }
            }
        }
        return maxSide * maxSide;
        
    }
}
相关推荐
随风75640 分钟前
有多少小于当前数字的数字 力扣1365
数据结构·算法·leetcode
今天吃什么了42 分钟前
矩阵幂(矩阵k次幂)
人工智能·算法·矩阵
我叫王棱夹42 分钟前
第五章-动态规划
算法·动态规划
dot to one2 小时前
深入刨析C++ stl::stack 、stl::queue 及 priority_queue
c语言·开发语言·数据结构·c++·算法·visual studio
程序趣谈5 小时前
算法随笔_74: 不同路径_1
数据结构·python·算法
修修修也6 小时前
算法手记3
数据结构·学习·算法·刷题
吧啦吧啦吡叭卜7 小时前
【打卡d5】快速排序 归并排序
java·算法·排序算法
L_cl7 小时前
【Python 数据结构 15.哈希表】
数据结构·算法·散列表
肖筱小瀟8 小时前
2025-3-13 leetcode刷题情况(贪心算法--区间问题)
算法·leetcode·贪心算法