力扣每日一题(四十一——统计可以提取的工件)

这篇博客记录了作者在LeetCode上的周赛经历,分享了一道关于挖掘文物的题目。作者提供了两种解决方案,一种是通过遍历和记录单元格状态来判断能否挖掘全部工件,另一种则是预先处理工件可能的位置,然后检查是否被挖掘。虽然第一种方法在某些测试用例中超时,但展示了不同的解题思路。
摘要由CSDN通过智能技术生成

仅以此纪录每日LeetCode所刷题目(今天的周赛打的巨差)。

题目描述:

示例:

思路:

这道题在比赛时我使用的是一种很笨的方法,将所有零件的所谓位置找出来,使用嵌套列表存储,之后依次遍历dig数组,若其中一个不存在则打破循环(count-1),但是很不幸,在倒数第二个测试用例超时了,因此我首先遍历dig,使用二维数组记录每个单元格是否被挖掘。遍历每个工件从左上到右下,只要其中所有单元格被挖掘则可以提取该工件。

代码:

class Solution:
    def digArtifacts(self, n: int, art: List[List[int]], dig: List[List[int]]) -> int:
        ans = 0
        g = [[False] * n for _ in range(n)]
        for x, y in dig:
            g[x][y] = True
        for r1, c1, r2, c2 in art:
            flag = True
            for i in range(r1, r2 + 1):
                for j in range(c1, c2 + 1):
                    if g[i][j] == False:
                        flag = False
                        break
                if not flag:
                    break
            if flag:
                ans += 1
        return ans
                

 再附上一个笨比代码:

class Solution:
    def digArtifacts(self, n: int, artifacts: List[List[int]], dig: List[List[int]]) -> int:
        list1 = []
        for i in range(len(artifacts)):
            if artifacts[i][0] == artifacts[i][2] and artifacts[i][1] == artifacts[i][3]:
                list1.append([[artifacts[i][0],artifacts[i][1]]])
                
            if artifacts[i][0] + 1 == artifacts[i][2] and artifacts[i][1] == artifacts[i][3]:
                list1.append([[artifacts[i][0],artifacts[i][1]],[artifacts[i][0]+1,artifacts[i][1]]])
                
            if artifacts[i][0] == artifacts[i][2] and artifacts[i][1] + 1 == artifacts[i][3]:
                list1.append([[artifacts[i][0],artifacts[i][1]],[artifacts[i][0],artifacts[i][1]+1]])
            
            if artifacts[i][0] + 2 == artifacts[i][2] and artifacts[i][1] == artifacts[i][3]:
                list1.append([[artifacts[i][0],artifacts[i][1]],[artifacts[i][0]+1,artifacts[i][1]]
                ,[artifacts[i][0]+2,artifacts[i][1]]])

            if artifacts[i][0] + 3 == artifacts[i][2] and artifacts[i][1] == artifacts[i][3]:
                list1.append([[artifacts[i][0],artifacts[i][1]],[artifacts[i][0]+1,artifacts[i][1]]
                ,[artifacts[i][0]+2,artifacts[i][1]],[artifacts[i][0]+3,artifacts[i][1]]])

            if artifacts[i][0] == artifacts[i][2] and artifacts[i][1] + 2 == artifacts[i][3]:
                list1.append([[artifacts[i][0],artifacts[i][1]],[artifacts[i][0],artifacts[i][1]+1]
                ,[artifacts[i][0],artifacts[i][1]+2]])

            if artifacts[i][0] == artifacts[i][2] and artifacts[i][1] + 3 == artifacts[i][3]:
                list1.append([[artifacts[i][0],artifacts[i][1]],[artifacts[i][0],artifacts[i][1]+1]
                ,[artifacts[i][0],artifacts[i][1]+2],[artifacts[i][0],artifacts[i][1]+3]])

            if artifacts[i][0] + 1 == artifacts[i][2] and artifacts[i][1] + 1 == artifacts[i][3]:
                list1.append([[artifacts[i][0],artifacts[i][1]],[artifacts[i][0]+1,artifacts[i][1]],[artifacts[i][0],artifacts[i][1]+1],[artifacts[i][0]+1,artifacts[i][1]+1]])
        count = len(list1)
        for i in list1:
            if len(i) == 1:
                if i[0] not in dig:
                    count -= 1
            else:
                for j in range(len(i)):
                    if i[j] not in dig:
                        count -= 1
                        break
        return count

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值