检查数组是否是排列的时间/空间复杂度?

时间:2018-03-02 04:12:23

标签: java

我试图为下面的问题写一个算法:

https://app.codility.com/programmers/lessons/4-counting_elements/perm_check/

问题需要我在

中解决
**Complexity**:

expected worst-case time complexity is O(N);
expected worst-case space complexity is O(N), beyond input storage (not counting the storage required for input arguments).

有人可以向我解释我的解决方案是否符合要求:

public static int checkPermutation(int arr[]) {
        int size = arr.length ;
        Set<Integer> s = new HashSet<>();   
        for (int i = 0; i < size; i++) {
            s.add(arr[i]);
        }   

        for (int i = 1; i <= size; i++) {
            boolean check = s.remove(i);
            if(!check){
                return 0;
            }
        }
        return 1;
}

请解释一下。由于我从1次迭代到2次,它是否通过o(N)时间复杂度要求?

1 个答案:

答案 0 :(得分:-3)

这里你正在做2个线性时间和线性空间(O(N))循环。这会使您的时间和空间复杂度为2 * n或O(2n)。我们不关心这里的2,因为当我们接近无限时,它可以忽略不计。这意味着您的时间复杂度为O(N),您的空间复杂度也为O(N)