我有一个数组int x []和一个数字。我喜欢在数组上搜索x [i] + x [i + 1] =数字。
Java中最有效,最快捷的方式是什么?
答案 0 :(得分:8)
这是一个伪代码,这应该有效。只读n个内存。
buff1 = x[0]
buff2 = 0
for i = 1 to n - 1
buff2 = x[i]
if (buff1 + buff2) == number
then
MATCH
endif
buff1 = buff2
endfor
答案 1 :(得分:1)
如果数组未排序且您只进行了一些搜索,请使用phoxis方法。它应该在O(n * k)中运行,其中n是x的大小,k是你不想进行的搜索次数。
如果数组已排序,我们知道x [i]< = number / 2且x [i + 1]> = number / 2。使用binary search查找数字/ 2 + 1的(最后一个)前任,并检查是否匹配。
int i = binaryPredecessor(x , number/2 + 1);
if(x[i] + x[i+1] == number){
return i;
}
else if(x[i-1] + x[i] == number){
//The case where x[i] == number/2, and we found the last of two occurrences
return i-1;
} else {
//No match exists
return -1;
}
运行时为O(log(n)* k)。
如果您进行了大量搜索,则可能需要对数组进行排序,并使用上述方法。数组可以在O(n * log(n))中排序[见mergersort]。因此,如果您想进行更多的log(n)搜索,那么对数组进行排序是值得的。 (如果k接近log(n),做一些测试,看看最好:))