在未排序的数组中查找值

发布于 2024-12-20 09:24:15 字数 460 浏览 1 评论 0原文

我需要找出数组中任意两个数字之和的所有组合。如果相等则打印它们。 该问题的线性解的复杂度为 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

蹲在坟头点根烟 2024-12-27 09:24:15

你可以先过滤掉所有不可能的事情。这应该只需要对数组进行两次迭代,并且有可能显着减少集合。如果没有,那么你只损失了 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).

这样的小城市 2024-12-27 09:24:15

性能略有提高

private static void find(int[] a, int target) {

    for (int i = 0; i < a.length; i++) {
        if (a[i] == target) {
            System.out.println("result found");
            break;
        }
        if (a[i] > target) {
            break;
        }
        for (int j = 0; j < a.length; j++) {
            if ((i != j && (a[i] + a[j]) == target)) {
                System.out.println("result found");
            }
        }
    }
}

Slightly improved the performance

private static void find(int[] a, int target) {

    for (int i = 0; i < a.length; i++) {
        if (a[i] == target) {
            System.out.println("result found");
            break;
        }
        if (a[i] > target) {
            break;
        }
        for (int j = 0; j < a.length; j++) {
            if ((i != j && (a[i] + a[j]) == target)) {
                System.out.println("result found");
            }
        }
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文