Finding Duplicates in an array -BruteForce [O(n^2)]

Finding duplicates in an array is a common interview question. The problem statement can be defined as follows. Given an array of n numbers, give an algorithm for checking whether, there are any duplicates in the array or not? For such questions obvious answer is Brute force  or Naive solution.

Solution: Exhaustively search for duplicates in the array. For-each input element, check whether there is any element with the same value. This can be solved with just by using two for loops.

Finding duplicates in an array – Brute Force

/**
* <p>check for array duplicates</p>
* Time Complexity   :: O(n^2)
* Space Complexity  :: O(1)
* @param a
* @return
*/
public static int checkDuplicatesBruteForce(int[] a){
int n=a.length;
int count=0;
  for(int i=0;i<n;i++){
	for(int j=0;j<n;j++){
		count++;
		if(a[i]==a[j]&&i!=j){
		System.out.println("No.of comparisons BruteForce"+count);
		return a[i];
		}
	}
}
System.out.println("No.of comparisons BruteForce"+count);
return -1;
}

In the above solution, we are making an extra comparison, element with it self. We can decrease no.of comparisons by avoiding comparison of element with self.

Finding duplicates in an array -Brute Force with improvement over no.of comparisons

/**
 * <p>check for array duplicates</p>
 * Time Complexity   :: O(n^2)
 * Space Complexity  :: O(1)
 * @param a
 * @return
 */
public static int checkDuplicatesBruteForce2(int[] a){
int n=a.length;
int count=0;
for(int i=0;i<n;i++){
   for(int j=i;j<n;j++){
   count++;
   if(a[i]==a[j]&&i!=j){
	System.out.println("No.of comparisons BruteForce2"+count);
	return a[i];
   }
 }
}
System.out.println("No.of comparisons BruteForce2"+count);
return -1;
}

A sample Test client for above programs

public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr1={0,3,2,2,1,5,6,7,9};
int[] arr2={0,3,2,1,5,6,7,9};
/**
 * Finding duplicates Brute Force technique
 */
  System.out.println(checkDuplicatesBruteForce(arr1));
  System.out.println(checkDuplicatesBruteForce(arr2));
/**
 * Finding duplicates Brute Force improved technique.
 */
  System.out.println(checkDuplicatesBruteForce2(arr1));
  System.out.println(checkDuplicatesBruteForce2(arr2));
}

 Output:

No.of comparisons BruteForce 22
2
No.of comparisons BruteForce 64
-1
No.of comparisons BruteForce2 19
2
No.of comparisons BruteForce2 36
-1

Leave a Comment