用于数组搜索的伪代码

时间:2012-09-25 05:16:11

标签: arrays algorithm pseudocode

问题:

“编写一个给定数组A和整数值k的算法,如果A中有两个不同的整数,则返回值为true,否则返回false。”

我的伪代码:

输入:大小为n的数组A,其值为k

输出:如果A中的两个不同的整数为k,则为true,否则为

Algorithm ArraySum(A, n, k)
for (i=0, i<n, i++)
    for (j=i+1, j<n, j++)
        if (A[i]+A[j]=k)
            return true
return false

我是否正确编写了此算法?我有没有看到任何错误?

3 个答案:

答案 0 :(得分:2)

关于这个问题,我脑子里有两个解决方案

第一个解决方案

1.制作空哈希
2.在哈希

中标记数组中的所有数字
 for each i (Array A){
        hash[i] = 1;
    }

3.只需运行O(n)循环

for each i (Array A)
    if(  hash[ k - i ] ) 
        print "solution i and k-i"

这会给你O(n)复杂性

第二个解决方案

1.Sort Array
2.在已排序的数组上运行O(n)循环

for each i (Array A)
    binary_search( Array, k - i); [log n operation]

这会给你O(n logn)复杂性。

答案 1 :(得分:0)

看起来像knapsack problem的某些情况。

对于你的情况(只有两个数字),可能会更好地对数组进行排序以减少比较次数(A [i] + A [j] = k)。

例如:

you have sorted array [1 3 5 8 10 12 14 20 50 60 100]
sum of two numbers must be equal to 30

然后你可以写

 while(a[i] <= 30) {
   while(a[i] + a[j] <= 30) {
    // ...
    i++;
    j++;
   } 
 }

答案 2 :(得分:0)

如果两个不同的整数表示A[i], A[j]i != j而不是A[i] != A[j],则您的伪代码是正确的。