首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

2023-06-26:在大小为 n x n 的网格 grid 上,每个单元格都有一盏灯,最初灯都处于 关闭 状态 给你一个由灯的

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完整代码如下:

在这里插入图片描述

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20230626A08DX600?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券