leetcode221 最大正方形

java 复制代码
class Solution {
    public int maximalSquare(char[][] matrix) {
        int row = matrix.length;
        int col = matrix[0].length;
        int[][] pref = new int[row + 1][col + 1];
        for (int i = 1; i < row + 1; i++) {
            for (int j = 1; j < col + 1; j++) {
                pref[i][j] = matrix[i - 1][j - 1] - '0' + pref[i - 1][j] + pref[i][j - 1] - pref[i - 1][j - 1];
            }
        }

        int maxSide = 0;

        for (int i = 1; i < row + 1; i++) {
            for (int j = 1; j < col + 1; j++) {
                for (int k = maxSide + 1; i - k >= 0 && j - k >= 0; k++) {
                    int sum = pref[i][j] - pref[i - k][j] - pref[i][j - k] + pref[i - k][j - k];
                    if (sum == k * k)
                        maxSide = k;

                }
            }
        }

        return maxSide * maxSide;

    }
}

在力扣中,这道题的最优解是动态规划(O(MN) 时间和 O(N) 空间),但前缀和方法对于解决"任意子矩形求和"类问题是通用的大杀器,非常值得掌握。

java 复制代码
public int maximalSquare(char[][] matrix) {
    int rows = matrix.length, cols = matrix[0].length;
    int[][] dp = new int[rows + 1][cols + 1];
    int maxSide = 0;

    for (int i = 1; i <= rows; i++) {
        for (int j = 1; j <= cols; j++) {
            if (matrix[i-1][j-1] == '1') {
                // 状态转移方程
                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;
}
相关推荐
可乐ea几秒前
【Spring Boot + MyBatis|第4篇】MyBatis 动态 SQL:if、where、foreach 使用详解
java·spring boot·后端·sql·mybatis
記億揺晃着的那天7 分钟前
Windows 通过 Java 获取可用端口的一个坑:Hyper-V 保留端口导致 UDP 绑定失败
java·windows·udp
组合缺一8 分钟前
SolonCode(编码智能体)支持鸿蒙 PC
java·华为·ai·ai编程·harmonyos·solon·soloncode
小bo波10 分钟前
用匿名内部类优雅地计算方法执行时间
java·设计模式·性能测试·模板方法模式·lambda·代码优化·匿名内部类
折哥的程序人生 · 物流技术专研14 分钟前
Tomcat 严重警告:JDBC 驱动未注销 + 工作线程泄漏 —— 原因、影响与彻底修复(生产级终极指南)
java·运维·数据库·mysql·oracle·tomcat
一个儒雅随和的男子17 分钟前
sentinel底层原理剖析以及实战优化
java·网络·sentinel
洛水水19 分钟前
【力扣100题】76.搜索插入位置
数据结构·算法·leetcode
Techblog of HaoWANG23 分钟前
智巡守卫:多模态巡检智能体算法服务端设计与实现——基于Ollama+Qwen3.5的自动化巡检报告生成系统
运维·人工智能·算法·目标检测·自动化·边缘计算
两年半的个人练习生^_^23 分钟前
JMM 进阶:彻底理解 synchronized 实现原理
java·开发语言
戳代码的新星30 分钟前
论小白如何学会使用Maven
java·maven