【发布时间】:2018-04-13 17:53:34
【问题描述】:
当给定一个数组(按升序)或整数时,我想以一种有效的方式在数组中找到整数。我检查数组的中间数字是否等于要检查的数字。如果是,那就太好了!如果不是,那么我检查该数字是否大于或小于中间数字。我将阵列切成两半并再次检查。但是,我一直得到零值。
public static int findNumber(int[] array, int number){
int position = 0;
int half = array.length/2;
//System.out.println(array[half]);
if (array[half]==number){
position=array.length/2;
}
else if (array[half]<number){
findNumber(Arrays.copyOfRange(array, half, array.length),number);
}
else if (array[half]>number){
findNumber(Arrays.copyOfRange(array,0,array.length/2),number);
}
return position;
}
唯一的例外是如果检查的数字是数组的确切中间数字。我认为该错误与我不了解 Arrays.copyOfRange(original, to: , from: ) 的工作原理有关。
【问题讨论】:
-
这种方法不正确,会返回错误的结果。如果您在每次调用时都更改索引,如何返回实际数组中的索引?你应该看看二分搜索实现,因为它是用于
-
根据您的描述,您正在尝试实现二进制搜索算法。你解决问题的方法是错误的。您必须也不需要以任何方式更改原始数组,当然也不要复制它的元素。你只关心中间元素。
-
使用此方法或使用 Arrays.copyOfRange() 方法并递归遍历提供的数组(包括接受的答案,甚至如果有效)。实际上,使用 for 循环简单地遍历提供的数组并在找到提供的数字后将其中断实际上更快。当然,如果数组中不存在所提供的数字,则需要采用一种方法,例如:
return (i == array.length ? -1 : i);其中 i 是迭代器计数器。 -1 表示未找到。代码也少了很多。
标签: java arrays recursion search