小S在玩一个捕获敌人的游戏,她可以使用一次全屏技能来捕获尽可能多的敌人。要使捕获成功,敌人的横坐标之间的最大差值不能超过参数A,纵坐标之间的最大差值不能超过参数B。现在给出所有敌人的坐标,计算小S一次性最多可以捕获多少个敌人。 例如,小S面对3个敌人,其坐标为 [1, 1],[1, 2] 和 [1, 3],当她设置技能的参数 A 为 1,B 为 1 时,最多可以同时捕获2个敌人。
-
初始化最大捕获敌人数量变量:
- 首先初始化变量
max_count为 0,用于记录小 S 一次性最多可以捕获的敌人数量,后续会通过遍历各种情况并比较来不断更新这个变量,以找到最大值。
- 首先初始化变量
-
双重循环遍历坐标组合确定范围:
- 通过两层嵌套的循环来遍历所有敌人坐标的两两组合情况。外层循环控制起始索引
i,范围从 0 到N - 1(N为敌人的数量),内层循环控制结束索引j,范围从i到N - 1,这样可以避免重复计算每一对坐标组合(比如(i, j)和(j, i)只计算一次)。 - 对于每一对坐标组合
(coordinates[i], coordinates[j]),分别找出它们横坐标的最小值min_x和最大值max_x,以及纵坐标的最小值min_y和最大值max_y,通过使用min和max函数来实现(例如min_x = min(coordinates[i][0], coordinates[j][0]),这里coordinates[i][0]和coordinates[j][0]分别是两个坐标的横坐标),确定了一个可能的捕获范围(以这两个坐标为对角顶点形成的矩形区域)。
- 通过两层嵌套的循环来遍历所有敌人坐标的两两组合情况。外层循环控制起始索引
-
内层循环判断其他敌人是否在范围内并计数:
- 初始化一个变量
count为 0,用于记录在当前确定的捕获范围内的敌人数量。通过一个内层循环遍历所有N个敌人的坐标(索引k从 0 到N - 1),对于每个敌人的坐标(x, y)(通过x = coordinates[k][0]和y = coordinates[k][1]获取),判断它是否在前面确定的捕获范围内(横坐标满足min_x <= x <= max_x,纵坐标满足min_y <= y <= max_y),并且还要判断这个范围的横坐标差值max_x - min_x是否不超过参数A,纵坐标差值max_y - min_y是否不超过参数B,如果都满足这些条件,说明该敌人在可捕获范围内,将count加 1。
- 初始化一个变量
-
更新最大捕获敌人数量变量:
- 在经过内层循环统计完当前捕获范围内的敌人数量
count后,将count与当前记录的最大捕获敌人数量max_count进行比较,使用max函数取两者中的较大值来更新max_count,这样不断遍历所有坐标组合情况并比较更新,就能找到在给定参数A和B限制下一次性最多可以捕获的敌人数量。
- 在经过内层循环统计完当前捕获范围内的敌人数量
-
返回最终结果:
-
当两层嵌套循环遍历完所有敌人坐标的组合情况后,
max_count变量中存储的就是小 S 一次性最多可以捕获的敌人数量,将其返回即可。
-
时间复杂度方面,外层循环遍历坐标组合的时间复杂度为 (N 为敌人数量,外层循环 N 次,内层循环最多 N 次),内层循环遍历所有敌人判断是否在范围内的时间复杂度为 ,在循环中进行的操作主要是简单的比较和赋值操作,时间复杂度都是常数级别,综合起来整体时间复杂度为 ,在处理常规数量的敌人以及给定的参数 A 和 B 时能够通过穷举所有可能情况来计算出最多可捕获的敌人数量。