我试图为下面的问题写一个算法:
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)时间复杂度要求?
答案 0 :(得分:-3)
这里你正在做2个线性时间和线性空间(O(N))循环。这会使您的时间和空间复杂度为2 * n或O(2n)。我们不关心这里的2,因为当我们接近无限时,它可以忽略不计。这意味着您的时间复杂度为O(N),您的空间复杂度也为O(N)