问题:
“编写一个给定数组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
我是否正确编写了此算法?我有没有看到任何错误?
答案 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]
,则您的伪代码是正确的。