力扣每日一题 最大加号标志

Day 41

Date: November 9, 2022 11:00 AM
LinkedIn: https://leetcode.cn/problems/largest-plus-sign/description/?languageTags=python
Title: 最大加号标志

不会动归,就来个暴力吧

class Solution:
    def orderOfLargestPlusSign(self, n: int, mines: List[List[int]]) -> int:
        mines =set([tuple(val) for val in mines]) # set()去重 tuple元组
        if len(mines) == n*n:
            return 0
        
        left, right, up, down = [[0] * (n+1) for _ in range(n+1)], [[0] * (n+1) for _ in range(n+1)], [[0] * (n+1) for _ in range(n+1)], [[0] * (n+1) for _ in range(n+1)] 

        # left
        # 对应中心点左边连续1个数
        for i in range(1, n+1):
            for j in range(1, n+1):
                if (i-1, j-1) in mines:# grid此坐标为0
                    continue
                left[i][j] = left[i][j-1] + 1
        
        # right 
        # 对应中心点右边连续1个数
        for i in range(1, n+1):
            for j in range(n-1, -1, -1):
                if (i-1, j) in mines:# grid此坐标为0
                    continue
                right[i][j] = right[i][j+1] + 1

        # up
        # 对应中心点上边连续1个数
        for j in range(1, n+1):
            for i in range(1, n+1):
                if (i-1, j-1) in mines:# grid此坐标为0
                    continue
                up[i][j] = up[i-1][j] + 1

        # down
        # 对应中心点下边连续1个数
        for j in range(1, n+1):
            for i in range(n-1, -1, -1):
                if (i, j-1) in mines:# grid此坐标为0
                    continue
                down[i][j] = down[i+1][j] + 1
        
        ans = 1 # 已经排除为0的情况
        for i, j in product(range(n), range(n)):
            if (i,j) in mines:
                continue
            l, r, u, d = left[i+1][j+1], right[i+1][j], up[i+1][j+1], down[i][j+1]
            if l > 1 and u > 1 and r > 1 and d > 1:
                ans = max(ans, min(l, r, u, d)) # 阶数为上下左右中最小值
        
        return ans
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

只惠摸鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值