检查数组中的数字

时间:2014-08-09 08:39:47

标签: java performance

快速检查数组中的整数。数组中没有连续的整数,而是具有空格数,例如[1,4,11,120,2,3]。

以时间有效的方式,如何检查3 in [212,31219,1,12,4]?结果为假

2 个答案:

答案 0 :(得分:1)

答案取决于您需要检查给定整数的频率。

  1. 如果你必须一遍又一遍地检查同一个数组,那么对它进行一次排序并使用二进制搜索算法来查找你的数字会更快(如果你的数字不在数组中,则不是这样)。

    在Java中,您不必重新发明轮子。您可以使用Arrays中的静态方法执行这些任务(数组的N大小):

    Arrays.sort(...)将按升序对数组进行排序。这会按O(N*log(N))步骤对数组进行排序。

    之后

    Arrays.binarySearch(...)会在排序数组中找到您的号码。在O(log(N))步骤中找到您的元素。

  2. 如果您只是偶尔检查一次给定值,您可以简单地遍历数组。在O(N)步骤中找到您的元素。

答案 1 :(得分:0)

有两种方法

考虑大小为N的数组,并且T搜索

线性搜索方法

复杂性:O (T * N)

示例代码:

class Main {
    public static void main(String[] args) {
        int[] arr = { 212, 31219, 1, 12, 4 };
        // perform searches from here
        // for eg.
        // boolean exists = contains(arr, 4);

    }

    public static boolean contains(int[] arr, int x) {
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == x) {
                return true;
            }
        }
        return false;
    }
}

二进制搜索方法

复杂性:O (N * log(N) + T * log(N)

示例代码:

import java.util.Arrays;

class Main {
    public static void main(String[] args) {
        int[] arr = { 212, 31219, 1, 12, 4 };

        // sort array first => complexity O(N * log(N))
        Arrays.sort(arr);

        // perform searches from here
        // for eg.
        // boolean exists = contains(arr, 2);       
    }

    public static boolean contains(int[] arr, int key) {
        return Arrays.binarySearch(arr, key) >= 0 ? true : false;
    }
}

因此,如果您的搜索次数非常高,请使用二进制搜索方法,否则使用线性搜索方法。