2026-01-19-LeetCode刷题笔记-1292-元素和小于等于阈值的正方形的最大边长


title: 2026-01-19-LeetCode刷题笔记-1292-元素和小于等于阈值的正方形的最大边长

date: 2026-01-19

tags:

  • 算法学习
  • LeetCode
  • 二维前缀和

题目信息


题目描述

给定一个矩阵 mat 和阈值 threshold,找到元素和不超过 threshold 的正方形子矩阵最大边长。


初步思路

  1. 用二维前缀和快速计算任意子矩阵的元素和。
  2. 枚举每个位置作为正方形左上角,尝试把当前最大边长继续扩大。
  3. 记录并更新全局最大边长。

算法分析

  • 核心:二维前缀和 + 枚举左上角并逐步扩大边长
  • 技巧:前缀和让子矩阵求和变成 O(1)
  • 时间复杂度:O(m * n * L),L 为最终最大边长(最坏 O(m * n * min(m, n)))
  • 空间复杂度:O(m * n)

前缀和直观解释

复制代码
A B C
D E F
G H I

想要的子矩形是:

复制代码
E F
H I

也就是左上角 D 的右下那一块,坐标上是 (1,1) ~ (2,2)


按拆分思路走一遍

  1. 大矩形 ABCDEFGHI:对应 s[3][3],整张 3x3 的和。

  2. 减去左边条 ADG:对应 s[3][1],剩下的是:

    B C
    E F
    H I

  3. 再减去上边条 ABC:对应 s[1][3],剩下的是:

    E F
    H I

  4. A 被减了两次,需要补回:对应 s[1][1]

最终公式:

复制代码
EFHI
= ABCDEFGHI
- ADG
- ABC
+ A

也就是:

复制代码
s[3][3] - s[3][1] - s[1][3] + s[1][1]

代码实现(Python)

python 复制代码
""" 
ABC
DEF
GHI
"""

"""  
要得到
EF
HI
可以先减去左边条ADG,在减去上边条ABC,再加上A(减了两次)
"""
class Solution:
    def maxSideLength(self, mat: List[List[int]], threshold: int) -> int:
        m,n = len(mat),len(mat[0])
        s = [[0]*(n+1) for _ in range(m+1)]
        for i,row in enumerate(mat):
            for j,x in enumerate(row):
                s[i+1][j+1] = s[i+1][j] +s[i][j+1] - s[i][j] + x

        #返回左上角在(r1,c1),右下角在(r2,c2)的子矩阵元素和
        def query(r1:int,c1:int,r2:int,c2:int)->int:
            return s[r2+1][c2+1]-s[r2+1][c1] - s[r1][c2+1]+s[r1][c1]

        ans = 0
        for i in range(m):
            for j in range(n):
                #边长为ans+1的正方形,左上角在(i,j),右下角在(i+ans,j+ans)
                while i + ans < m and j + ans < n and query(i,j,i+ans,j+ans) <= threshold:
                    ans += 1
        return ans

总结与反思

  1. 二维前缀和是处理子矩阵和的基础工具。
  2. 当前实现是"能扩就扩",若需更优可考虑二分边长。
相关推荐
测试_AI_一辰22 分钟前
AI测试工程笔记 05:AI评测实践(从数据集到自动评测闭环)
人工智能·笔记·功能测试·自动化·ai编程
2401_831824961 小时前
基于C++的区块链实现
开发语言·c++·算法
We་ct2 小时前
LeetCode 918. 环形子数组的最大和:两种解法详解
前端·数据结构·算法·leetcode·typescript·动态规划·取反
愣头不青2 小时前
238.除了自身以外数组的乘积
数据结构·算法
人工智能AI酱2 小时前
【AI深究】逻辑回归(Logistic Regression)全网最详细全流程详解与案例(附大量Python代码演示)| 数学原理、案例流程、代码演示及结果解读 | 决策边界、正则化、优缺点及工程建议
人工智能·python·算法·机器学习·ai·逻辑回归·正则化
WangLanguager2 小时前
逻辑回归(Logistic Regression)的详细介绍及Python代码示例
python·算法·逻辑回归
m0_518019482 小时前
C++与机器学习框架
开发语言·c++·算法
一段佳话^cyx2 小时前
详解逻辑回归(Logistic Regression):原理、推导、实现与实战
大数据·算法·机器学习·逻辑回归
qq_417695052 小时前
C++中的代理模式高级应用
开发语言·c++·算法
xiaoye-duck3 小时前
《算法题讲解指南:动态规划算法--路径问题》--5.不同路径,6.不同路径II
c++·算法·动态规划