2023-06-26:在大小为 n x n 的网格 grid 上,每个单元格都有一盏灯,最初灯都处于 关闭 状态
给你一个由灯的位置组成的二维数组 lamps
其中 lamps[i] = [rowi, coli] 表示 打开 位于 grid[rowi][coli] 的灯
即便同一盏灯可能在 lamps 中多次列出,不会影响这盏灯处于 打开 状态
当一盏灯处于打开状态,它将会照亮 自身所在单元格
以及同一 行 、同一 列 和两条 对角线 上的 所有其他单元格
另给你一个二维数组 queries ,其中 queries[j] = [rowj, colj]
对于第 j 个查询,如果单元格 [rowj, colj] 是被照亮的
则查询结果为 1 ,否则为 0 。在第 j 次查询之后 [按照查询的顺序]
关闭 位于单元格 grid[rowj][colj] 上
及相邻 8 个方向上(与单元格 grid[rowi][coli] 共享角或边)的任何灯。
返回一个整数数组 ans 作为答案, ans[j] 应等于第 j 次查询 queries[j] 的结果.
1 表示照亮,0 表示未照亮。
输入:n = 5, lamps = [[0,0],[4,4]], queries = [[1,1],[1,0]]。
输出:[1,0]。
答案2023-06-26:
大体步骤如下:
1.首先,定义一个存储灯位置的二维数组 lamps,和查询位置的二维数组 queries。
2.创建四个map,用于记录每行、每列、左上到右下对角线和右上到左下对角线上的灯的数量。还有一个points map,用于存储所有点的状态。
3.遍历灯的位置,将灯的状态记录到相关的map中,并将点的状态记录到points map中。
4.创建一个结果数组 ans,用于存储每个查询的结果。
5.对于每一个查询位置,初始化结果为0。
6.如果查询位置所在的行、列、左上到右下对角线或者右上到左下对角线上有灯,将结果设为1。
7.遍历查询位置周围的8个方向,如果有灯,则关闭该灯,并在相关的map中减去相应的数量。
8.返回结果数组 ans。
时间复杂度分析:
• 遍历灯的位置并初始化maps需要 O(lamps),其中 lamps 是灯的数量。
• 对于每个查询位置,遍历周围的8个方向,检查是否有灯需要 O(1) 的时间。
• 因此,总的时间复杂度为 O(lamps + queries)。
空间复杂度分析:
• maps 和 points 的空间复杂度均为 O(lamps),其中 lamps 是灯的数量。
• 结果数组 ans 的空间复杂度为 O(queries),其中 queries 是查询的数量。
• 因此,总的空间复杂度为 O(lamps + queries)。
go完整代码如下:
在这里插入图片描述rust完整代码如下:
在这里插入图片描述c++完整代码如下:
在这里插入图片描述c完整代码如下:
在这里插入图片描述
领取专属 10元无门槛券
私享最新 技术干货