• LeetCode每日一题——764. 最大加号标志


    LeetCode每日一题系列

    题目:764. 最大加号标志
    难度:普通



    题目

    在一个 n x n 的矩阵 grid 中,除了在数组 mines 中给出的元素为 0,其他每个元素都为 1。mines[i] = [xi, yi]表示 grid[xi][yi] == 0

    返回 grid 中包含 1 的最大的 轴对齐 加号标志的阶数 。如果未找到加号标志,则返回 0 。

    一个 k 阶由 1 组成的 “轴对称”加号标志 具有中心网格 grid[r][c] == 1 ,以及4个从中心向上、向下、向左、向右延伸,长度为 k-1,由 1 组成的臂。注意,只有加号标志的所有网格要求为 1 ,别的网格可能为 0 也可能为 1 。

    示例

    示例 1:

    在这里插入图片描述

    输入: n = 5, mines = [[4, 2]]
    输出: 2
    解释: 在上面的网格中,最大加号标志的阶只能是2。一个标志已在图中标出。

    示例 2:

    在这里插入图片描述

    输入: n = 1, mines = [[0, 0]]
    输出: 0
    解释: 没有加号标志,返回 0 。

    提示:

    1 <= n <= 500
    1 <= mines.length <= 5000
    0 <= xi, yi < n
    每一对 (xi, yi) 都 不重复

    思路

    预处理,先使用四个数组分别代表每个位置上、下、左、右四个方向上连续1的个数,最后再遍历每个位置,找到四个方向上数量最少的连续的1的个数就为该位置的“阶数”,求出最大值即可

    题解

    class Solution:
        def orderOfLargestPlusSign(self, n: int, mines: List[List[int]]) -> int:
            g = [[1] * (n + 10) for _ in range(n + 10)]
            # 将0的位置复原
            for x, y in mines:
                g[x + 1][y + 1] = 0
            # 下、右、上、左四个方向上连续1的个数的数组
            a, b, c, d = [[0] * (n + 10) for _ in range(n + 10)], [[0] * (n + 10) for _ in range(n + 10)], [[0] * (n + 10) for _ in range(n + 10)], [[0] * (n + 10) for _ in range(n + 10)]
            # 维护四个数组
            for i in range(1, n + 1):
                for j in range(1, n + 1):
                    if g[i][j] == 1:
                        a[i][j] = a[i - 1][j] + 1
                        b[i][j] = b[i][j - 1] + 1
                    if g[n + 1 - i][n + 1 - j] == 1:
                        c[n + 1 - i][n + 1 - j] = c[n + 2 - i][n + 1 - j] + 1
                        d[n + 1 - i][n + 1 - j] = d[n + 1 - i][n + 2 - j] + 1
            ans = 0
            # 利用以维护好的四个数组来寻找最大值
            for i in range(1, n + 1):
                for j in range(1, n + 1):
                	# 找到四个方向上最小的连续1的个数
                    ans = max(ans, min(min(a[i][j], c[i][j]), min(b[i][j], d[i][j])))
            return ans
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
  • 相关阅读:
    Java面试、面经丨从试题到面试讲个遍
    20uec++多人游戏【小球与玩家互动】
    视觉语言跨模态特征语义相似度计算改进--表征空间维度语义依赖感知聚合算法 ACM MM
    C#面:as 和 is 的区别
    如何轻松修改Windows远程连接的端口号
    自我介绍思考
    select实现延时函数
    计算机智能专题-遗传算法(1不带约束的)
    【玩转腾讯云】使用轻量应用服务器和calibre-web搭建个人在线图书馆
    【C语言】每日一题(添加逗号)
  • 原文地址:https://blog.csdn.net/m0_52000372/article/details/127773653