【发布时间】:2018-02-28 07:51:00
【问题描述】:
我正在尝试在 Java 中实现递归二进制搜索,但是它不适用于所有测试用例。我正在做一个黑客等级挑战,它没有向我展示我错过的测试用例。当我用自己的案例测试它时,它总是测试成功。我不知道我错过了什么。
import java.util.Arrays;
public class Project {
public static void main(String [] args){
int[] arr = {1,2,4,7,9,10,11};
Arrays.sort(arr);
String x = findNumber(arr, 10);
System.out.println(x);
}
private static String findNumber(int[] arr, int k) {
int arrLength = arr.length - 1;
int mid = Math.round(Math.abs((arrLength) / 2));
if (arrLength >= mid){
if (arr[mid] == k) {
return "YES";
}
else if (arr[mid] > k) {
int[] newArr = Arrays.copyOfRange(arr, 0, mid);
return findNumber(newArr, k);
}
else if (arr[mid] < k) {
int[] newArr = Arrays.copyOfRange(arr, mid + 1, arrLength + 1);
return findNumber(newArr, k);
}
}
return "NO";
}
}
谁能看出我做错了什么?
【问题讨论】:
-
您尝试过哪些边缘情况?会不会是大样本量的错误?
-
请不要在每个递归步骤中复制数组。
-
@clinomaniac 我尝试了相对较小的数组大小(2-12),但似乎一切正常。我希望 Hacker rank 能显示它正在测试的测试用例。
-
@Bytes 我似乎有些站点的测试用例具有非常大的样本量,因此可能会在数组复制或其他东西上抛出异常。除了性能之外,我认为算法本身没有任何问题。
-
@clinomaniac 如何更改数组复制部分以提高性能?
标签: java binary-search