在未排序的数组中查找值

时间:2011-12-08 04:48:51

标签: arrays binary-search

我需要找出数组中任意两个数字之和的所有组合。如果相等则打印它们。 该问题的线性解具有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]
     }

有没有办法进一步降低复杂性?

谢谢, 大师

2 个答案:

答案 0 :(得分:0)

您可以先筛选出所有不可能性。这应该只需要在阵列中进行两次迭代,并且有可能大大减少该集合。如果没有,那么你只丢失了2次迭代。

对于初学者,您可以找到最少的数字,然后过滤掉所有值&gt; (目标 - 最少数量)。

答案 1 :(得分:0)

略微改善了性能

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");
            }
        }
    }
}