我从Google得到了这个挑战。我只是好奇为什么我的解决方案没有通过所有测试。它在第二个测试用例中失败了。
以下是问题:(请注意,输出2是错误的,我已经向Google提交了反馈。)
僵尸病毒感染
布尔教授继续对你的兔子同胞进行可怕的研究,而并不是所有的研究都在实验室里进行。报道称,这位疯狂的医生准备用一种病毒感染当地村庄的一只兔子,将其转化为僵尸兔子!
布尔教授相信该病毒具有传播能力,他只会感染一只兔子。不幸的是,你和你的抵抗组织同事们不知道哪只兔子会被感染。你们被要求预测如果无法遏制感染,感染将如何传播,因此你决定创建一个模拟实验。在这个模拟中,Dr. Boolean最初感染的兔子将被称为“Z患者”。
到目前为止,实验室专家已经发现所有兔子都具有一种称为“抵抗力”的属性,可以对抗感染。该病毒具有特定的“强度”,Dr. Boolean需要使其至少与兔子的抵抗力一样才能感染它们。
您将提供以下信息:
population = A 2D non-empty array of positive integers of the form population[y][x],
即按行再按列的顺序排列(数组的维度不一定相等)。每个单元格都包含一只兔子,单元格的值表示该兔子的抵抗力。
x = The X-Coordinate (column) of "Patient Z" in the population array.
y = The Y-Coordinate (row) of "Patient Z" in the population array.
strength = A constant integer value representing the Strength of the virus.
这是模拟的规则: 首先,病毒将尝试感染患者Z。只有当感染的强度等于或大于患者Z的抵抗力时,患者Z才会被感染。从那时起,任何感染的兔子都会尝试感染任何未感染的邻居(在数组中直接相邻而不是对角线)。它们将成功地感染任何抵抗力低于或等于感染强度的邻居。这将继续进行,直到不再可能感染为止(即每个与感染的兔子相邻的未感染兔子的抵抗力都大于感染的强度)。
您需要编写一个名为answer(population, x, y, strength)的函数,该函数输出输入数组的副本,表示在模拟结束时人口状态,其中任何感染的单元格值都已替换为-1。强度和抵抗力值将介于0和10000之间。人口网格至少为1x1,不大于25x25。x和y值将是人口数组中的有效索引,编号从0开始。
测试用例:
输入:
(int) population = [[1, 2, 3], [2, 3, 4], [3, 2, 1]]
(int) x = 0
(int) y = 0
(int) strength = 2
输出:
(int) [[-1, -1, 3], [-1, 3, 4], [3, 2, 1]]
输入:
(int) population = [[9, 3, 4, 5, 4], [1, 6, 5, 4, 3], [2, 3, 7, 3, 2], [3, 4, 5, 8, 1], [4, 5, 4, 3, 9]]
(int) x = 2
(int) y = 1
(int) strength = 5
输出:
(int) [[6, 7, -1, 7, 6], [6, -1, -1, -1, 7], [-1, -1, -1, -1, 10], [8, -1, -1, -1, 9], [8, 7, -1, 9, 9]]
我的解决方案:
public static int[][] answer(int[][] population, int x, int y, int strength)
{
int length = population.length;
if(y < 0 || y >= length)
return population;
int width = population[y].length;
if(x < 0 || x >= width)
return population;
if(population[y][x] != -1 && population[y][x] <= strength)
{
population[y][x] = -1;
population = answer(population, x, y + 1, strength);
population = answer(population, x + 1, y, strength);
population = answer(population, x, y - 1, strength);
population = answer(population, x - 1, y, strength);
}
return population;
}
这是第三级别的挑战。不想显得自大,但说实话,这个挑战最终让我放弃了,因为它浪费了我很多时间。验证和提交我的解决方案需要很长时间,因为系统经常超时,重试次数很多。即使我的第二级挑战已经通过了所有5个测试用例,但由于系统不能正确响应我的命令,我的挑战仍未被提交。
总之,他们的挑战系统仍有很多漏洞,从技术用户的角度来看,仍然令人沮丧。
那么,你认为第二个测试用例是什么?谷歌并没有提供任何信息。我的解决方案“足够好”吗?