2201 统计可以提取的工件(哈希表)

1. 问题描述:

存在一个 n x n 大小、下标从 0 开始的网格,网格中埋着一些工件。给你一个整数 n 和一个下标从 0 开始的二维整数数组 artifacts ,artifacts 描述了矩形工件的位置,其中 artifacts[i] = [r1i,c1i, r2i,c2i] 表示第 i 个工件在子网格中的填埋情况:
(r1i,c1i) 是第 i 个工件左上单元格的坐标,且
(r2i,c2i) 是第 i 个工件右下单元格的坐标。
你将会挖掘网格中的一些单元格,并清除其中的填埋物。如果单元格中埋着工件的一部分,那么该工件这一部分将会裸露出来。如果一个工件的所有部分都都裸露出来,你就可以提取该工件。给你一个下标从 0 开始的二维整数数组 dig ,其中 dig[i] = [ri,ci] 表示你将会挖掘单元格 (ri,ci) ,返回你可以提取的工件数目。
生成的测试用例满足:
不存在重叠的两个工件。
每个工件最多只覆盖 4 个单元格。
dig 中的元素互不相同。
 
示例 1:

输入:n = 2, artifacts = [[0,0,0,0],[0,1,1,1]], dig = [[0,0],[0,1]]
输出:1
解释: 
不同颜色表示不同的工件。挖掘的单元格用 'D' 在网格中进行标记。
有 1 个工件可以提取,即红色工件。
蓝色工件在单元格 (1,1) 的部分尚未裸露出来,所以无法提取该工件。
因此,返回 1 。

示例 2:

输入:n = 2,artifacts = [[0,0,0,0],[0,1,1,1]], dig = [[0,0],[0,1],[1,1]]
输出:2
解释:红色工件和蓝色工件的所有部分都裸露出来(用 'D' 标记),都可以提取。因此,返回 2 。 

提示:

1 <= n <= 1000
1 <= artifacts.length, dig.length <= min(n ^ 2,10 ^ 5)
artifacts[i].length == 4
dig[i].length == 2
0 <= r1i,c1i, r2i, c2i, ri, ci  <=  n  - 1
r1i <= r2i
c1i <= c2i
不存在重叠的两个工件
每个工件最多只覆盖 4 个单元格
dig 中的元素互不相同

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/count-artifacts-that-can-be-extracted/

2. 思路分析:

分析题目可以知道我们可以将dig中的所有位置存储到哈希表中,然后枚举每一个artifacts[i]中所有的坐标判断artifacts[i]中的每一个坐标是否在哈希表中如果所有坐标在哈希表中说明可以挖掘,计数加1.

3. 代码如下:

from typing import List


class Solution:
    def digArtifacts(self, n: int, artifacts: List[List[int]], dig: List[List[int]]) -> int:
        mp = dict()
        for x in dig:
            mp[(x[0], x[1])] = 1
        count = 0
        for (r1, c1, r2, c2) in artifacts:
            flag = 1
            for i in range(r1, r2 + 1):
                for j in range(c1, c2 + 1):
                    if (i, j) not in mp:
                        flag = 0
                        break
            if flag:
                count += 1
        return count
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值