搜索数组

时间:2011-05-08 04:41:13

标签: java arrays algorithm

我有一个数组int x []和一个数字。我喜欢在数组上搜索x [i] + x [i + 1] =数字。

Java中最有效,最快捷的方式是什么?

2 个答案:

答案 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),做一些测试,看看最好:))