Given an array which may contain duplicates, print all elements and their frequencies.
Examples:
Input : arr[] = {10, 20, 20, 10, 10, 20, 5, 20} Output : 10 3 20 4 5 1 Input : arr[] = {10, 20, 20} Output : 10 1 20 2
A simple solution is to run two loops. For every item count number of times it occurs. To avoid duplicate printing, keep track of processed items.
C++
// CPP program to count frequencies of array items #include <bits/stdc++.h> using namespace std; void countFreq( int arr[], int n) { // Mark all array elements as not visited vector< bool > visited(n, false ); // Traverse through array elements and // count frequencies for ( int i = 0; i < n; i++) { // Skip this element if already processed if (visited[i] == true ) continue ; // Count frequency int count = 1; for ( int j = i + 1; j < n; j++) { if (arr[i] == arr[j]) { visited[j] = true ; count++; } } cout << arr[i] << " " << count << endl; } } int main() { int arr[] = { 10, 20, 20, 10, 10, 20, 5, 20 }; int n = sizeof (arr) / sizeof (arr[0]); countFreq(arr, n); return 0; } |
Java
// Java program to count frequencies of array items import java.util.Arrays; class GFG { public static void countFreq( int arr[], int n) { boolean visited[] = new boolean [n]; Arrays.fill(visited, false ); // Traverse through array elements and // count frequencies for ( int i = 0 ; i < n; i++) { // Skip this element if already processed if (visited[i] == true ) continue ; // Count frequency int count = 1 ; for ( int j = i + 1 ; j < n; j++) { if (arr[i] == arr[j]) { visited[j] = true ; count++; } } System.out.println(arr[i] + " " + count); } } // Driver code public static void main(String []args) { int arr[] = new int []{ 10 , 20 , 20 , 10 , 10 , 20 , 5 , 20 }; int n = arr.length; countFreq(arr, n); } } // This code contributed by Adarsh_Verma. |
Python3
# Python 3 program to count frequencies # of array items def countFreq(arr, n): # Mark all array elements as not visited visited = [ False for i in range (n)] # Traverse through array elements # and count frequencies for i in range (n): # Skip this element if already # processed if (visited[i] = = True ): continue # Count frequency count = 1 for j in range (i + 1 , n, 1 ): if (arr[i] = = arr[j]): visited[j] = True count + = 1 print (arr[i], count) # Driver Code if __name__ = = '__main__' : arr = [ 10 , 20 , 20 , 10 , 10 , 20 , 5 , 20 ] n = len (arr) countFreq(arr, n) # This code is contributed by # Shashank_Sharma |
C#
// C# program to count frequencies of array items using System; class GFG { public static void countFreq( int []arr, int n) { bool []visited = new bool [n]; // Traverse through array elements and // count frequencies for ( int i = 0; i < n; i++) { // Skip this element if already processed if (visited[i] == true ) continue ; // Count frequency int count = 1; for ( int j = i + 1; j < n; j++) { if (arr[i] == arr[j]) { visited[j] = true ; count++; } } Console.WriteLine(arr[i] + " " + count); } } // Driver code public static void Main(String []args) { int []arr = new int []{ 10, 20, 20, 10, 10, 20, 5, 20 }; int n = arr.Length; countFreq(arr, n); } } // This code has been contributed by 29AjayKumar |
10 3 20 4 5 1
Time Complexity : O(n2)
Auxiliary Space : O(n)
An efficient solution is to use hashing.
C++
// CPP program to count frequencies of array items #include <bits/stdc++.h> using namespace std; void countFreq( int arr[], int n) { unordered_map< int , int > mp; // Traverse through array elements and // count frequencies for ( int i = 0; i < n; i++) mp[arr[i]]++; // Traverse through map and print frequencies for ( auto x : mp) cout << x.first << " " << x.second << endl; } int main() { int arr[] = { 10, 20, 20, 10, 10, 20, 5, 20 }; int n = sizeof (arr) / sizeof (arr[0]); countFreq(arr, n); return 0; } |
Java
// Java program to count frequencies of array items import java.util.*; class GFG { static void countFreq( int arr[], int n) { Map<Integer, Integer> mp = new HashMap<>(); // Traverse through array elements and // count frequencies for ( int i = 0 ; i < n; i++) { if (mp.containsKey(arr[i])) { mp.put(arr[i], mp.get(arr[i]) + 1 ); } else { mp.put(arr[i], 1 ); } } // Traverse through map and print frequencies for (Map.Entry<Integer, Integer> entry : mp.entrySet()) { System.out.println(entry.getKey() + " " + entry.getValue()); } } // Driver code public static void main(String args[]) { int arr[] = { 10 , 20 , 20 , 10 , 10 , 20 , 5 , 20 }; int n = arr.length; countFreq(arr, n); } } // This code contributed by Rajput-Ji |
Python3
# Python3 program to count frequencies # of array items def countFreq(arr, n): mp = dict () # Traverse through array elements # and count frequencies for i in range (n): if arr[i] in mp.keys(): mp[arr[i]] + = 1 else : mp[arr[i]] = 1 # Traverse through map and print # frequencies for x in mp: print (x, " " , mp[x]) # Driver code arr = [ 10 , 20 , 20 , 10 , 10 , 20 , 5 , 20 ] n = len (arr) countFreq(arr, n) # This code is contributed by # Mohit kumar 29 |
C#
// C# implementation of the approach using System; using System.Collections.Generic; class GFG { static void countFreq( int []arr, int n) { Dictionary< int , int > mp = new Dictionary< int , int >(); // Traverse through array elements and // count frequencies for ( int i = 0; i < n; i++) { if (mp.ContainsKey(arr[i])) { var val = mp[arr[i]]; mp.Remove(arr[i]); mp.Add(arr[i], val + 1); } else { mp.Add(arr[i], 1); } } // Traverse through map and print frequencies foreach (KeyValuePair< int , int > entry in mp) { Console.WriteLine(entry.Key + " " + entry.Value); } } // Driver code public static void Main(String []args) { int []arr = {10, 20, 20, 10, 10, 20, 5, 20}; int n = arr.Length; countFreq(arr, n); } } /* This code contributed by PrinciRaj1992 */ |
5 1 10 3 20 4
Time Complexity : O(n)
Auxiliary Space : O(n)
In above efficient solution, how to print elements in same order as they appear in input?
C++
// CPP program to count frequencies of array items #include <bits/stdc++.h> using namespace std; void countFreq( int arr[], int n) { unordered_map< int , int > mp; // Traverse through array elements and // count frequencies for ( int i = 0; i < n; i++) mp[arr[i]]++; // To print elements according to first // occurrence, traverse array one more time // print frequencies of elements and mark // frequencies as -1 so that same element // is not printed multiple times. for ( int i = 0; i < n; i++) { if (mp[arr[i]] != -1) { cout << arr[i] << " " << mp[arr[i]] << endl; mp[arr[i]] = -1; } } } int main() { int arr[] = { 10, 20, 20, 10, 10, 20, 5, 20 }; int n = sizeof (arr) / sizeof (arr[0]); countFreq(arr, n); return 0; } |
Java
// Java program to count frequencies of array items import java.util.*; class GFG { static void countFreq( int arr[], int n) { Map<Integer, Integer> mp = new HashMap<>(); // Traverse through array elements and // count frequencies for ( int i = 0 ; i < n; i++) { mp.put(arr[i], mp.get(arr[i]) == null ? 1 : mp.get(arr[i]) + 1 ); } // To print elements according to first // occurrence, traverse array one more time // print frequencies of elements and mark // frequencies as -1 so that same element // is not printed multiple times. for ( int i = 0 ; i < n; i++) { if (mp.get(arr[i]) != - 1 ) { System.out.println(arr[i] + " " + mp.get(arr[i])); mp.put(arr[i], - 1 ); } } } // Driver code public static void main(String[] args) { int arr[] = { 10 , 20 , 20 , 10 , 10 , 20 , 5 , 20 }; int n = arr.length; countFreq(arr, n); } } // This code contributed by Rajput-Ji |
Python3
# Python3 program to count frequencies of array items def countFreq(arr, n): mp = {} # Traverse through array elements and # count frequencies for i in range (n): if arr[i] not in mp: mp[arr[i]] = 0 mp[arr[i]] + = 1 # To prelements according to first # occurrence, traverse array one more time # prfrequencies of elements and mark # frequencies as -1 so that same element # is not printed multiple times. for i in range (n): if (mp[arr[i]] ! = - 1 ): print (arr[i],mp[arr[i]]) mp[arr[i]] = - 1 # Driver code arr = [ 10 , 20 , 20 , 10 , 10 , 20 , 5 , 20 ] n = len (arr) countFreq(arr, n) # This code is contributed by shubhamsingh10 |
C#
// C# program to count frequencies of array items using System; using System.Collections.Generic; class GFG { static void countFreq( int []arr, int n) { Dictionary< int , int > mp = new Dictionary< int , int >(); // Traverse through array elements and // count frequencies for ( int i = 0 ; i < n; i++) { if (mp.ContainsKey(arr[i])) { var val = mp[arr[i]]; mp.Remove(arr[i]); mp.Add(arr[i], val + 1); } else { mp.Add(arr[i], 1); } } // To print elements according to first // occurrence, traverse array one more time // print frequencies of elements and mark // frequencies as -1 so that same element // is not printed multiple times. for ( int i = 0; i < n; i++) { if (mp.ContainsKey(arr[i]) && mp[arr[i]] != -1) { Console.WriteLine(arr[i] + " " + mp[arr[i]]); mp.Remove(arr[i]); mp.Add(arr[i], -1); } } } // Driver code public static void Main(String[] args) { int []arr = {10, 20, 20, 10, 10, 20, 5, 20}; int n = arr.Length; countFreq(arr, n); } } // This code is contributed by Princi Singh |
10 3 20 4 5 1
Time Complexity : O(n)
Auxiliary Space : O(n)
This problem can be solved in Java using Hashmap. Below is the program.
// Java prorgam to count frequencies of // integers in array using Hashmap import java.io.*; import java.util.*; class OccurenceOfNumberInArray { static void frequencyNumber( int arr[], int size) { // Creating a HashMap containing integer // as a key and occurrences as a value HashMap<Integer, Integer> freqMap = new HashMap<Integer, Integer>(); for ( int i= 0 ;i<size;i++) { if (freqMap.containsKey(arr[i])) { // If number is present in freqMap, // incrementing it's count by 1 freqMap.put(arr[i], freqMap.get(arr[i]) + 1 ); } else { // If integer is not present in freqMap, // putting this integer to freqMap with 1 as it's value freqMap.put(arr[i], 1 ); } } // Printing the freqMap for (Map.Entry entry : freqMap.entrySet()) { System.out.println(entry.getKey() + " " + entry.getValue()); } } // Driver Code public static void main(String[] args) { int arr[] = { 10 , 20 , 20 , 10 , 10 , 20 , 5 , 20 }; int size = arr.length; frequencyNumber(arr,size); } } |
Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.