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;
}
相关推荐
云原生指北1 小时前
GitHub Copilot SDK 入门:五分钟构建你的第一个 AI Agent
java
仰泳的熊猫2 小时前
题目2570:蓝桥杯2020年第十一届省赛真题-成绩分析
数据结构·c++·算法·蓝桥杯
Leinwin5 小时前
OpenClaw 多 Agent 协作框架的并发限制与企业化规避方案痛点直击
java·运维·数据库
无极低码5 小时前
ecGlypher新手安装分步指南(标准化流程)
人工智能·算法·自然语言处理·大模型·rag
薛定谔的悦5 小时前
MQTT通信协议业务层实现的完整开发流程
java·后端·mqtt·struts
软件算法开发6 小时前
基于海象优化算法的LSTM网络模型(WOA-LSTM)的一维时间序列预测matlab仿真
算法·matlab·lstm·一维时间序列预测·woa-lstm·海象优化
enjoy嚣士6 小时前
springboot之Exel工具类
java·spring boot·后端·easyexcel·excel工具类
罗超驿6 小时前
独立实现双向链表_LinkedList
java·数据结构·链表·linkedlist
superior tigre6 小时前
22 括号生成
算法·深度优先