【发布时间】:2011-12-08 13:14:35
【问题描述】:
我需要找出数组中任意两个数字之和的所有组合。如果相等,则打印它们。 该问题的线性解决方案具有 O(N^2) 复杂度。 我想到了排序,然后进行二进制比较。复杂度仍然是(NlogN + N)
问题是我需要找到它的所有组合。
这个问题的线性解决方案 例如。
//Linear search, find all the combinations
Find(int a[], int Target)
{
for(i=0; i<arr_size; i++)
for(j=0; j<arr_size; j++)
if((a[i]+a[j]) == Target)
cout<<a[i]<<a[j]
}
有没有办法进一步降低复杂度?
谢谢, 大师
【问题讨论】:
-
"复杂度仍然是 (NlogN + N)" - O(NlogN) 的复杂度有什么问题??
-
线性解应该有
if(i!=j && (a[i]+a[j]) == Target)。考虑到排序本身的复杂性,我不清楚排序有什么帮助?
标签: arrays binary-search