user16519
10
Q:

find duplicate elements in array in java

package dto;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

/**
 * Java Program to find duplicate elements in an array. There are two straight
 * forward solution of this problem first, brute force way and second by using
 * HashSet data structure. A third solution, similar to second one is by using
 * hash table data structure e.g. HashMap to store count of each element and
 * print element with count 1.
 * 
 * @author java67
 */

public class DuplicatesInArray{

    public static void main(String args[]) {

        String[] names = { "Java", "JavaScript", "Python", "C", "Ruby", "Java" };

        // First solution : finding duplicates using brute force method
        System.out.println("Finding duplicate elements in array using brute force method");
        for (int i = 0; i < names.length; i++) {
            for (int j = i + 1; j < names.length; j++) {
                if (names[i].equals(names[j]) ) {
                   // got the duplicate element
                }
            }
        }

        // Second solution : use HashSet data structure to find duplicates
        System.out.println("Duplicate elements from array using HashSet data structure");
        Set<String> store = new HashSet<>();

        for (String name : names) {
            if (store.add(name) == false) {
                System.out.println("found a duplicate element in array : "
                        + name);
            }
        }

        // Third solution : using Hash table data structure to find duplicates
        System.out.println("Duplicate elements from array using hash table");
        Map<String, Integer> nameAndCount = new HashMap<>();

        // build hash table with count
        for (String name : names) {
            Integer count = nameAndCount.get(name);
            if (count == null) {
                nameAndCount.put(name, 1);
            } else {
                nameAndCount.put(name, ++count);
            }
        }

        // Print duplicate elements from array in Java
        Set<Entry<String, Integer>> entrySet = nameAndCount.entrySet();
        for (Entry<String, Integer> entry : entrySet) {

            if (entry.getValue() > 1) {
                System.out.println("Duplicate element from array : "
                        + entry.getKey());
            }
        }
    }
}
Output :
Finding duplicate elements in array using brute force method
Duplicate elements from array using HashSet data structure
found a duplicate element in array : Java
Duplicate elements from array using hash table
Duplicate element from array : Java
-1
// Uses a set, which does not allow duplicates 

for (String name : names) {
     if (set.add(name) == false) {
        // your duplicate element
     }
}
0
	public static Set<String> findDuplicates(List<String> listContainingDuplicates) {
 
		final Set<String> setToReturn = new HashSet<String>();
		final Set<String> set1 = new HashSet<String>();
 
		for (String yourInt : listContainingDuplicates) {
			if (!set1.add(yourInt)) {
				setToReturn.add(yourInt);
			}
		}
		return setToReturn;
	}
0
// 287. Find the Duplicate Number
// Medium

// Given an array nums containing n + 1 integers where each integer is between 1 and n (inclusive), prove that at least one duplicate number must exist. Assume that there is only one duplicate number, find the duplicate one.

// Example 1:

// Input: [1,3,4,2,2]
// Output: 2
// Example 2:

// Input: [3,1,3,4,2]
// Output: 3
// Note:

// You must not modify the array (assume the array is read only).
// You must use only constant, O(1) extra space.
// Your runtime complexity should be less than O(n2).
// There is only one duplicate number in the array, but it could be repeated more than once.

class Solution {
public:
    int findDuplicate(vector<int>& nums) {
        int n=nums.size();
        int s=nums[0];
        int f=nums[nums[0]];
        while(s!=f) {
            s=nums[s];
            f=nums[nums[f]];
        }
        f=0;
        while(s!=f) {
            s=nums[s];
            f=nums[f];
        }
        return s;
        
    }
};
0
/*This method is all in one 
*you can find following things:
*finding Duplicate elements in array
*array without duplicate elements
*number of duplicate elements
*numbers of pair of dulicate with  repeatation
*/
//let given array = [2,3,2,5,3]
   public static void findDuplicateArray(int [] array)
   {
	   int size = array.length;
     //creating array to hold count frequency of array elements
	   int [] countFrequency = new int[size];
     // filling countFrequency with -1 value on every index
	   for(int i = 0; i < size; i++)
	   {
		   countFrequency[i] = -1;//[-1,-1,-1,-1,-1...]
	   }
    
      int count = 1;
	   for(int i = 0; i < size; i++) 
	   {
         //check countFrequency[i] != 0 because 0 means it already counted
		  if(countFrequency[i] != 0)
		  {
		   for(int j = i+1; j < size; j++)  
		   {
             //if array[i] == array[j] then increase count value
			   if(array[i] == array[j])
			   {
				   count++;
                 /*only at first occurence of an element count value 
                 *will be increased else everywhere it  will be 0 
                 */
				   countFrequency[j]= 0;				   
			   }
		   }
		   countFrequency[i] = count;
	      }
		  count = 1;
	   }
     // array         = [2,3,2,5,3]
     //countFrequency = [2,2,0,1,0]
	   System.out.println("array without duplicate elements");
		    for(int i = 0; i < array.length; i++)
		    {
		    	if(countFrequency[i] >= 1)
		    	System.out.print(array[i] + " ");
		    }
		    System.out.println();
		    
	   System.out.println("duplicate elements in array");
		    for(int i = 0; i < array.length; i++)
		    {
		    	if(countFrequency[i]/2 >= 1)
		    	System.out.print(array[i] + " ");
		    }
	        System.out.println();
		    
	   System.out.println("number of duplicate elements");
		     count = 0;
		    for(int i = 0; i < array.length; i++)
		    {	    	
		    	if(countFrequency[i]/2 >= 1)
		            count++;
		    }
		    System.out.print(count);
		    System.out.println();
		    
	  System.out.println("numbers of pair of dulicate with  repeatation");
		     count = 0;
		    for(int i = 0; i < array.length; i++)
		    {
		    	if(countFrequency[i] >= 2)
		    	{
		    		int div = countFrequency[i]/2;
		    		count+=div;
		    	}
		    }
		    System.out.println(count);
			
		    int [] array3 = new int [array.length];
		    for(int i = 0; i < array.length; i++)
		    {
		    	for(int j = 0; j < countFrequency[i]; j++)
		    	{
		    		array3[i]= array[i];
		    	}
		    }
   }
0

New to Communities?

Join the community