在未排序的数组中查找值
我需要找出数组中任意两个数字之和的所有组合。如果相等则打印它们。 该问题的线性解的复杂度为 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]
}
有什么办法可以进一步降低复杂度吗?
谢谢, 大师
I need to find out all the combinations of sum of any two numbers in an array. if it is equal then print them.
The linear solution to this problem has O(N^2) complexity.
I thought of sorting and then doing a binary comparison. The complexity is still (NlogN + N)
The problem is I need to find all the combinations of it.
A linear solution to this problem
Eg.
//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]
}
Is there any way to reduce the complexity further?
Thanks,
Guru
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
你可以先过滤掉所有不可能的事情。这应该只需要对数组进行两次迭代,并且有可能显着减少集合。如果没有,那么你只损失了 2 次迭代。
对于初学者,您可以找到最小的数字,然后过滤掉所有值 > (目标 - 最少数量)。
You could first filter out all impossibilities. This should only need two iterations through the array and has the potential to dramatically reduce the set. If it doesn't, well you have only lost 2 iterations.
For starters, you could find your least number, then filter out all values > (target - least number).
性能略有提高
Slightly improved the performance