Count distinct elements in an array

Given an unsorted array, count all distinct elements in it.

Examples:

Input :   arr[] = {10, 20, 20, 10, 30, 10}
Output : 3
There are three distinct elements 10, 20 and 30.

Input :   arr[] = {10, 20, 20, 10, 20}
Output : 2

Recommended: Please try your approach on {IDE} first, before moving on to the solution.

A simple solution is to run two loops. For every element, check if it has appeared before. If yes, increment count of distinct elements.

 // C++ program to count distinct elements // in a given array #include using namespace std;    int countDistinct(int arr[], int n) {     int res = 1;        // Pick all elements one by one     for (int i = 1; i < n; i++) {         int j = 0;         for (j = 0; j < i; j++)             if (arr[i] == arr[j])                 break;            // If not printed earlier, then print it         if (i == j)             res++;     }     return res; }    // Driver program to test above function int main() {     int arr[] = { 12, 10, 9, 45, 2, 10, 10, 45 };     int n = sizeof(arr) / sizeof(arr);     cout << countDistinct(arr, n);     return 0; }

 // Java program to count distinct  // elements in a given array class GFG {        static int countDistinct(int arr[], int n) {     int res = 1;        // Pick all elements one by one     for (int i = 1; i < n; i++)      {         int j = 0;         for (j = 0; j < i; j++)             if (arr[i] == arr[j])                 break;            // If not printed earlier,          // then print it         if (i == j)             res++;     }     return res; }    // Driver code public static void main(String[] args) {     int arr[] = { 12, 10, 9, 45, 2, 10, 10, 45 };     int n = arr.length;     System.out.println(countDistinct(arr, n)); } }    // This code is contributed by Code_Mech.

 # Python3 program to count distinct  # elements in a given array def countDistinct(arr, n):        res = 1        # Pick all elements one by one     for i in range(1, n):         j = 0         for j in range(i):             if (arr[i] == arr[j]):                 break            # If not printed earlier, then prit         if (i == j + 1):             res += 1            return res    # Driver Code arr = [12, 10, 9, 45, 2, 10, 10, 45] n = len(arr) print(countDistinct(arr, n))    # This code is contributed by Mohit Kumar

 // C# program to count distinct  // elements in a given array using System;    class GFG {        static int countDistinct(int []arr, int n) {     int res = 1;        // Pick all elements one by one     for (int i = 1; i < n; i++)      {         int j = 0;         for (j = 0; j < i; j++)             if (arr[i] == arr[j])                 break;            // If not printed earlier,          // then print it         if (i == j)             res++;     }     return res; }    // Driver code public static void Main() {     int []arr = { 12, 10, 9, 45,                    2, 10, 10, 45 };     int n = arr.Length;     Console.WriteLine(countDistinct(arr, n)); } }    // This code is contributed // by Akanksha Rai



Output:
5

Time Complexity of above solution is O(n2). We can Use Sorting to solve the problem in O(nLogn) time. The idea is simple, first sort the array so that all occurrences of every element become consecutive. Once the occurrences become consecutive, we can traverse the sorted array and count distinct elements in O(n) time. Following is the implementation of the idea.

 // C++ program to count all distinct elements // in a given array #include #include using namespace std;    int countDistinct(int arr[], int n) {     // First sort the array so that all     // occurrences become consecutive     sort(arr, arr + n);        // Traverse the sorted array     int res = 0;     for (int i = 0; i < n; i++) {            // Move the index ahead while         // there are duplicates         while (i < n - 1 && arr[i] == arr[i + 1])             i++;            res++;     }        return res; }    // Driver program to test above function int main() {     int arr[] = { 6, 10, 5, 4, 9, 120, 4, 6, 10 };     int n = sizeof(arr) / sizeof(arr);     cout << countDistinct(arr, n);     return 0; }

 // Java program to count all distinct elements // in a given array import java.util.Arrays;    class GFG  {        static int countDistinct(int arr[], int n)      {         // First sort the array so that all         // occurrences become consecutive         Arrays.sort(arr);            // Traverse the sorted array         int res = 0;         for (int i = 0; i < n; i++)          {                // Move the index ahead while             // there are duplicates             while (i < n - 1 &&                      arr[i] == arr[i + 1])             {                 i++;             }             res++;         }         return res;     }        // Driver code     public static void main(String[] args)     {         int arr[] = {6, 10, 5, 4, 9, 120, 4, 6, 10};         int n = arr.length;         System.out.println(countDistinct(arr, n));     } }     // This code is contributed by 29AjayKumar

 # Python3 program to count all distinct # elements in a given array    def countDistinct(arr, n):        # First sort the array so that all     # occurrences become consecutive     arr.sort();        # Traverse the sorted array     res = 0;     i = 0;     while(i < n):            # Move the index ahead while         # there are duplicates         while (i < n - 1 and                 arr[i] == arr[i + 1]):             i += 1;            res += 1;         i += 1;        return res;    # Driver Code arr = [ 6, 10, 5, 4, 9, 120, 4, 6, 10 ]; n = len(arr); print(countDistinct(arr, n));    # This code is contributed by mits

 // C# program to count all distinct elements // in a given array using System;    class GFG  {        static int countDistinct(int[] arr, int n)      {         // First sort the array so that all         // occurrences become consecutive         Array.Sort(arr);            // Traverse the sorted array         int res = 0;         for (int i = 0; i < n; i++)          {                // Move the index ahead while             // there are duplicates             while (i < n - 1 &&                      arr[i] == arr[i + 1])             {                 i++;             }             res++;         }         return res;     }        // Driver code     public static void Main()     {         int[] arr = {6, 10, 5, 4, 9, 120, 4, 6, 10};         int n = arr.Length;         Console.WriteLine(countDistinct(arr, n));     } }     // This code is contributed by Code_Mech.



Output:
6

We can Use Hashing to solve this in O(n) time on average. The idea is to traverse the given array from left to right and keep track of visited elements in a hash set , as a set consists of only unique elements.
Following is the implementation of the idea.

 /* CPP program to print all distinct elements     of a given array */ #include using namespace std;    // This function prints all distinct elements int countDistinct(int arr[], int n) {     // Creates an empty hashset     unordered_set s;        // Traverse the input array     int res = 0;     for (int i = 0; i < n; i++) {            // If not present, then put it in         // hashtable and increment result         if (s.find(arr[i]) == s.end()) {             s.insert(arr[i]);             res++;         }     }        return res; }    // Driver program to test above function int main() {     int arr[] = { 6, 10, 5, 4, 9, 120, 4, 6, 10 };     int n = sizeof(arr) / sizeof(arr);     cout << countDistinct(arr, n);     return 0; }

 // Java Program to count // Unique elements in Array import java.util.*;    class GFG {            // This method returns count      // of Unique elements      public static int countDistinct(int arr[],int n)     {            HashSet hs = new HashSet();            for(int i = 0; i < n; i++)         {              // add all the elements to the HashSet              hs.add(arr[i]);         }                    // return the size of hashset as          // it consists of all Unique elements          return hs.size();          }        // Driver code     public static void main(String[] args)      {          int arr[] = new int[]{6, 10, 5, 4, 9,                                 120, 4, 6, 10};         System.out.println(countDistinct(arr,                                  arr.length));     } }    // This code is contributed by Adarsh_Verma

 // C# Program to count // Unique elements in Array using System; using System.Collections.Generic;    class GFG {            // This method returns count      // of Unique elements      public static int countDistinct(int []arr,int n)     {            HashSet hs = new HashSet();            for(int i = 0; i < n; i++)         {              // add all the elements to the HashSet              hs.Add(arr[i]);         }                    // return the size of hashset as          // it consists of all Unique elements          return hs.Count;          }        // Driver code     public static void Main()      {          int []arr = new int[]{6, 10, 5, 4, 9,                                 120, 4, 6, 10};         Console.WriteLine(countDistinct(arr,                                  arr.Length));     } }     /* This code contributed by PrinciRaj1992 */



Output:
6

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

Article Tags :
Practice Tags :