所以我在做一个代码挑战,这里基本上有一个整数数组,每个索引中的值指向另一个索引您的工作是查找数组中循环的长度,前提是从数组中的索引0开始。
即:numbers={1,3,0,1};Index 0是1,这将导致索引1是3,这将导致1,这将导致返回索引1,从而创建一个长度为2的循环。
我的问题是我的代码能够通过3/5个测试用例,我无法在代码中找到任何可能导致错误的弱点。除了“测试用例n失败”之外,没有人告诉我预期的结果,也没有任何其他信息
这是我的代码:
public static int answer(int[] numbers) {
List<Integer> valuesUsed = new ArrayList<Integer>();
int nextValue, currentValue = numbers[0];
do {
valuesUsed.add(currentValue);
currentValue = (nextValue = numbers[currentValue]);
} while (!valuesUsed.contains(currentValue));
return valuesUsed.size();
}
编辑:
阵列大小在2到5000之间。
我收到的测试用例是{1,3,0,1},{1,0},{1,2,1},其中我的代码全部正确通过。
最佳答案
我不确定这是否是唯一的错误,但你忘了将0
添加到valuesUsed
。这是您遇到的第一个索引,因此应该在循环之前将其添加到列表中。
编辑:
更正:
关闭循环时,返回valuesUsed.size()
是错误的,因为遇到的某些索引不是循环的一部分。
您应该返回valuesUsed.size()-valuesUsed.indexOf(currentValue)
。
例如,如果数组是{1,3,1,4,2},则循环是1->3->4->2->1,循环的长度是4(不计算第一个元素)。