Let A be an array of size n >=2 containing integers from 1 to n - 1, inclusive, with exactly one repeated. Describe a fast algorithm for finding the integer in A that is repeated.
- O(n) for time and no extra space:
public class findDuplicate { public static int findDup(int A[]){ int dupNum = 0; for(int i = 0; i < A.length; i++){ dupNum += A[i] - i; } return dupNum; } public static void main(String args[]){ int[] A = {5,1,2,3,2,4}; System.out.println(findDup(A)); } }
- O(n) for time and extra space:
public class findDuplicate { public static int findDup(int A[]){ int B[] = new int[A.length]; for(int i = 0; i < B.length; i++){ B[i] = 0; } for(int j = 0; j < A.length; j++){ if(B[A[j]] == 0){ B[A[j]] = 1; }else{ return A[j]; } } return 0; } public static void main(String args[]){ int[] A = {5,1,2,3,2,4}; System.out.println(findDup(A)); } }