存在一个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(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进阶实践技术资料,并且还有技术大牛一起讨论交流解决问题。