LeetCode 每日一题 2026/3/16-2026/3/22

记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步


目录

      • [3/16 1878. 矩阵中最大的三个菱形和](#3/16 1878. 矩阵中最大的三个菱形和)
      • [3/17 1727. 重新排列后的最大子矩阵](#3/17 1727. 重新排列后的最大子矩阵)
      • [3/18 3070. 元素和小于等于 k 的子矩阵的数目](#3/18 3070. 元素和小于等于 k 的子矩阵的数目)
      • [3/19 3212. 统计 X 和 Y 频数相等的子矩阵数量](#3/19 3212. 统计 X 和 Y 频数相等的子矩阵数量)
      • [3/20 3567. 子矩阵的最小绝对差](#3/20 3567. 子矩阵的最小绝对差)
      • 3/21
      • 3/22

3/16 1878. 矩阵中最大的三个菱形和

枚举菱形中心(i,j)和边长k k=0时为单个格子

菱形边框由4条对角线段组成 每段k个点(不含下一段起点 避免重复)

用set收集所有不同的菱形和 排序取前三大

python 复制代码
def getBiggestThree(grid):
    """
    :type grid: List[List[int]]
    :rtype: List[int]
    """
    m, n = len(grid), len(grid[0])
    sums = set()
    for i in range(m):
        for j in range(n):
            sums.add(grid[i][j])
            for k in range(1, min(i, m-1-i, j, n-1-j) + 1):
                s = 0
                for d in range(k):
                    s += grid[i-k+d][j+d]
                    s += grid[i+d][j+k-d]
                    s += grid[i+k-d][j-d]
                    s += grid[i-d][j-k+d]
                sums.add(s)
    return sorted(sums, reverse=True)[:3]

3/17 1727. 重新排列后的最大子矩阵

预处理每列连续1的高度 每行按高度降序排列(模拟列重排)

即matrixij表示在第i行的第j列往上连续1的个数

排序后第j列的高度h意味着至少有j+1列高度>=h 面积=h*(j+1) 取最大值

python 复制代码
def largestSubmatrix(matrix):
    """
    :type matrix: List[List[int]]
    :rtype: int
    """
    m, n = len(matrix), len(matrix[0])
    for i in range(1, m):
        for j in range(n):
            if matrix[i][j]:
                matrix[i][j] += matrix[i-1][j]
    ans = 0
    for i in range(m):
        row = sorted(matrix[i], reverse=True)
        for j in range(n):
            ans = max(ans, row[j] * (j + 1))
    return ans

3/18 3070. 元素和小于等于 k 的子矩阵的数目

固定左上角开始 每个元素>0 右下角越往右下矩阵和越大

根据前缀和计算 mxij 代表以(i,j)为右下角的矩阵和

mxij=mxi-1j+mxij-1-mxi-1j-1+gridij

实际mx多一行一列方便计算

如果当前mxij>k 这一行后续都不满足条件

可以提前终止

python 复制代码
def countSubmatrices(grid, k):
    """
    :type grid: List[List[int]]
    :type k: int
    :rtype: int
    """
    n,m=len(grid),len(grid[0])
    mx=[[0]*(m+1) for _ in range(n+1)]
    ans=0
    for i in range(1,n+1):
        for j in range(1,m+1):
            mx[i][j]=mx[i-1][j]+mx[i][j-1]-mx[i-1][j-1]+grid[i-1][j-1]
            if mx[i][j]<=k:
                ans+=1
            else:
                break
    return ans

3/19 3212. 统计 X 和 Y 频数相等的子矩阵数量

将X看作为1 将Y看作为-1 统计前缀和 如果前缀和为0 则说明X和Y频数相等

使用tagij记录以(i,j)为右下角的子矩阵中是否包含X

python 复制代码
def numberOfSubmatrices(self, grid):
    """
    :type grid: List[List[str]]
    :rtype: int
    """
    m,n=len(grid),len(grid[0])
    mx=[[0]*(n+1) for _ in range(m+1)]
    tag=[[False]*(n+1) for _ in range(m+1)]
    for i in range(1,m+1):
        for j in range(1,n+1):
            mx[i][j]=mx[i-1][j]+mx[i][j-1]-mx[i-1][j-1]+int(grid[i-1][j-1]=='X')-int(grid[i-1][j-1]=='Y')
            tag[i][j]=tag[i-1][j] or tag[i][j-1] or grid[i-1][j-1]=='X'
    ans=0
    for i in range(1,m+1):
        for j in range(1,n+1):
            if mx[i][j]==0 and tag[i][j]:
                ans+=1
    return ans

3/20 3567. 子矩阵的最小绝对差

遍历所有子矩阵 将所有元素排序后 计算相邻元素的差值绝对值最小值

python 复制代码
def minAbsDiff(grid, k):
    """
    :type grid: List[List[int]]
    :type k: int
    :rtype: List[List[int]]
    """
    m, n = len(grid), len(grid[0])
    ans = []
    for i in range(m - k + 1):
        row = []
        for j in range(n - k + 1):
            vals = sorted(set(grid[r][c] for r in range(i, i+k) for c in range(j, j+k)))
            diff = 0 if len(vals) == 1 else min(vals[t+1]-vals[t] for t in range(len(vals)-1))
            row.append(diff)
        ans.append(row)
    return ans

3/21

python 复制代码

3/22

python 复制代码

相关推荐
琥珀色糖8 小时前
Linux守护进程
linux·终端·守护进程·会话·进程组
Tisfy9 小时前
LeetCode 3876.构造奇偶一致的数组 II:三种情况分类讨论(其实还是脑筋急转弯)
算法·leetcode·题解·脑筋急转弯
木井巳11 小时前
【BFS/DFS 解决 FloodFill 算法】太平洋大西洋水流问题
java·算法·leetcode·深度优先·广度优先·宽度优先·推荐算法
开心大爆炸11 小时前
xrdp 连接 登录对话框输入密码后闪退
linux·运维·服务器
oushaojun212 小时前
大厂 C++ 面试:深度剖析 Linux Signal 信号机制(转)
linux
公子小六12 小时前
基于.NET的Windows窗体编程之WinForms滑块与上下控件
windows·microsoft·c#·.net·winforms
Navigator_Z12 小时前
LeetCode //C - 1224. Maximum Equal Frequency
c语言·算法·leetcode
苏生Susheng13 小时前
【软件实施】Linux系统Shell脚本教程
linux·运维·服务器·chrome·spring boot·学习·实施
Ruiery13 小时前
Linux 6.6内核 IOMMU 深度解析(七):DMA API 与 IOMMU 集成 — 从 dma_map_single 到 iommu_map
linux·运维·服务器
Navigator_Z13 小时前
LeetCode //C++ - 1226. The Dining Philosophers
c语言·算法·leetcode