leetcode 统计可以提取的工件

13 篇文章 0 订阅
给定一个nxn的网格,其中包含一些工件,任务是根据挖掘操作暴露工件并计算可以提取的工件数量。工件由四个坐标定义,挖掘操作由单元格坐标给出。示例展示了如何在不同挖掘条件下提取工件。问题保证不存在重叠工件,每个工件最多覆盖4个单元格,且挖掘操作不重复。
摘要由CSDN通过智能技术生成

存在一个n x n大小、下标从0开始的网格,网格中埋着一些工件。给你一个整数n和一个下标从0开始的二维整数数组artifactsartifacts描述了矩形工件的位置,其中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(n2, 105)
  • artifacts[i].length == 4
  • dig[i].length == 2
  • 0 <= r1i, c1i, r2i, c2i, ri, ci?<= n - 1
  • r1i?<= r2i
  • c1i?<= c2i
  • 不存在重叠的两个工件
  • 每个工件最多只覆盖4个单元格
  • dig中的元素互不相同

C++

class Solution {
public:
    int digArtifacts(int n, vector<vector<int>>& artifacts, vector<vector<int>>& dig) {
        int res=0;
        vector<vector<int>> flag(n,vector<int>(n,0));
        for(auto it:dig) {
            flag[it[0]][it[1]]=1;
        }
        for(auto it:artifacts) {
            int t=0;
            for(int i=it[0];i<=it[2];i++) {
                for(int j=it[1];j<=it[3];j++) {
                    if(flag[i][j]==0) {
                        t=1;
                        break;
                    }
                }
            }
            if(t==0) {
                res++;
            }
        }
        return res;
    }
};

总结

写到这里也结束了,在文章最后放上一个小小的福利,以下为小编自己在学习过程中整理出的一个关于 java开发 的学习思路及方向。从事互联网开发,最主要的是要学好技术,而学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯,更加需要准确的学习方向达到有效的学习效果。

由于内容较多就只放上一个大概的大纲,需要更及详细的学习思维导图的 点击我的Gitee获取
还有 高级java全套视频教程 java进阶架构师 视频+资料+代码+面试题!

全方面的java进阶实践技术资料,并且还有技术大牛一起讨论交流解决问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值