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;
}
相关推荐
知无不研2 小时前
实现一个整形栈
c语言·数据结构·c++·算法
夏鹏今天学习了吗2 小时前
【LeetCode热题100(98/100)】子集
算法·leetcode·深度优先
DuHz2 小时前
用于汽车应用的数字码调制(DCM)雷达白皮书精读
论文阅读·算法·自动驾驶·汽车·信息与通信·信号处理
猿小羽2 小时前
深度实战:Spring AI 与 MCP(Model Context Protocol)构建下一代 AI Agent
java·大模型·llm·ai agent·spring ai·开发者工具·mcp
李昊哲小课2 小时前
机器学习核心概念与经典算法全解析
人工智能·算法·机器学习·scikit-learn
曾几何时`2 小时前
二分查找(十)1146. 快照数组 pair整理
java·服务器·前端
编程(变成)小辣鸡2 小时前
JVM、JRE和JDK 的关系
java·开发语言·jvm
lbb 小魔仙2 小时前
【Java】Spring Cloud 微服务系统搭建:核心组件 + 实战项目,一步到位
java·spring cloud·微服务
a程序小傲2 小时前
得物Java面试被问:流批一体架构的实现和状态管理
java·开发语言·数据库·redis·缓存·面试·架构