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;
        
    }
}
相关推荐
M78佐菲35 分钟前
Linux学习笔记:进程回收、exec函数簇与线程
linux·笔记·学习·算法
linux-hzh37 分钟前
百日算法修炼 · Day 18
算法
用户8132679332539 分钟前
Python 计算盘中 VWAP:为什么 1 分钟 K 线是量化工程中的高性价比选择
后端·算法·github
高频因子挖掘机44 分钟前
Python批量获取1000只ETF 5分钟K线:从分页到吞吐量优化的QuantDash实践
后端·算法·github
额额额对了1 小时前
Linux C 多线程编程基础:从内存模型到生命周期管理
linux·开发语言·算法
INGNIGHT2 小时前
1584.连接所有点的最小费用(最小生成树&并查集union find)
c++·leetcode
wabs6662 小时前
关于二叉树【力扣144.二叉树的前序遍历的思考】
数据结构·c++·算法·leetcode·二叉树
郝学胜-神的一滴2 小时前
C++20 高级编程 004:从初始化、内存到const系列关键字
开发语言·算法·编程·软件构建·c++20
kyle~2 小时前
点云配准--- 迭代最近点 ICP 求解
线性代数·算法·机器学习
qq7422349842 小时前
Gradio 极简入门:三分钟为AI模型打造交互界面,并对比Streamlit与Dash如何选型
人工智能·算法·大模型·交互·dash