昆山建设银行网站首页,北京公司网站建设,互联网推广引流公司,安阳网络公司文章目录1. 题目2. 解题1. 题目
存在一个 n x n 大小、下标从 0 开始的网格#xff0c;网格中埋着一些工件。给你一个整数 n 和一个下标从 0 开始的二维整数数组 artifacts #xff0c;artifacts 描述了矩形工件的位置#xff0c;其中 artifacts[i] [r1i, c1i, r2i, c2i] …
文章目录1. 题目2. 解题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(n2, 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. 解题
把坐标位置 哈希化(x*ky) 存入哈希表遍历所有的工件的所有位置去哈希表里查找如果有不存在的就不能挖出来
class Solution {
public:int digArtifacts(int n, vectorvectorint artifacts, vectorvectorint dig) {unordered_setint d;for(auto di : dig)d.insert((di[0]10)di[1]);int ans 0;for(auto a : artifacts){int r1 a[0], r2 a[2], c1 a[1], c2 a[3];bool ok true;for(int i r1; i r2; i){for(int j c1; j c2; j){int hash (i10)j;if(d.find(hash) d.end()){ok false;break;}}if(!ok) break;}if(ok)ans;}return ans; }
};428 ms 158.6 MB C 我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号Michael阿明一起加油、一起学习进步