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;
        
    }
}
相关推荐
罗西的思考1 小时前
【Agent OS / AIOS】AOHP 深度解读:当 OS 开始为 Agent 而设计
人工智能·算法·机器学习
民乐团扒谱机2 小时前
【微实验】组合优化matlab实战(马科维茨投资模型):在收益与风险之间,寻找最优的人生配比
大数据·人工智能·算法·机器学习·数学建模·matlab·组合优化
Nil2083 小时前
leetcode 160相交链表
算法·leetcode·链表
迷途之人不知返4 小时前
算法系列2:滑动窗口
算法
Herbert_hwt4 小时前
C语言零基础入门:循环控制与数据类型详解
c语言·数据结构·算法
Tisfy5 小时前
LeetCode 3090.每个字符最多出现两次的最长子字符串:二重循环 / 滑动窗口
算法·leetcode·字符串·题解·模拟·双指针·滑动窗口
-dzk-5 小时前
【技巧】LC 136.只出现一次的数字
算法·异或
有点。6 小时前
C++二叉树二(练习题)
数据结构·c++·算法·图论
专注仿真6 小时前
问答大模型技术方案算法实现-RAPTOR树构建算法与BEG集成使用
python·算法
zlinear数据采集卡7 小时前
数据采集卡从入门到精通(10):采样率与分辨率的核心关系——反比律、架构分布与过采样
arm开发·嵌入式硬件·算法·fpga开发·架构·开源