Find the frequency of each element in a sorted array - GeeksforGeeks

22 Jul, 2021
Given a sorted array, arr[] consisting of N integers, the task is to find the frequencies of each array element.
Examples: 
Input: arr[] = {1, 1, 1, 2, 3, 3, 5, 5, 8, 8, 8, 9, 9, 10} Output: Frequency of 1 is: 3              Frequency of 2 is: 1              Frequency of 3 is: 2              Frequency of 5 is: 2              Frequency of 8 is: 3              Frequency of 9 is: 2              Frequency of 10 is: 1
Input: arr[] = {2, 2, 6, 6, 7, 7, 7, 11} Output:  Frequency of 2 is: 2               Frequency of 6 is: 2               Frequency of 7 is: 3               Frequency of 11 is: 1
Naive Approach: The simplest approach is to traverse the array and keep the count of every element encountered in a HashMap and then, in the end, print the frequencies of every element by traversing the HashMap. This approach is already implemented here.
Time Complexity: O(N)Auxiliary Space: O(N)
Efficient Approach: The above approach can be optimized in terms of space used based on the fact that, in a sorted array, the same elements occur consecutively, so the idea is to maintain a variable to keep track of the frequency of elements while traversing the array. Follow the steps below to solve the problem:
Initialize a variable, say freq as 1 to store the frequency of elements.
Iterate in the range [1, N-1] using the variable i and perform the following steps:If the value of arr[i] is equal to arr[i-1], increment freq by 1.Else print value the frequency of arr[i-1] obtained in freq and then update freq to 1.
If the value of arr[i] is equal to arr[i-1], increment freq by 1.
Else print value the frequency of arr[i-1] obtained in freq and then update freq to 1.
Finally, after the above step, print the frequency of the last distinct element of the array as freq.
Below is the implementation of the above approach:
C++
Java
Python3
C#
Javascript
// C++ program for the above approach#include <bits/stdc++.h>using namespace std;     // Function to print the frequency    // of each element of the sorted array     void printFreq(vector<int> &arr, int N)    {                // Stores the frequency of an element        int freq = 1;               // Traverse the array arr[]        for (int i = 1; i < N; i++)        {                       // If the current element is equal            // to the previous element            if (arr[i] == arr[i - 1])            {                               // Increment the freq by 1                freq++;            }                   // Otherwise,            else {                cout<<"Frequency of "<<arr[i - 1]<< " is: " << freq<<endl;                // Update freq                freq = 1;            }        }                // Print the frequency of the last element       cout<<"Frequency of "<<arr[N - 1]<< " is: " << freq<<endl;       }     // Driver Code    int main()    {               // Given Input        vector<int> arr            = { 1, 1, 1, 2, 3, 3, 5, 5,                8, 8, 8, 9, 9, 10 };        int N = arr.size();               // Function Call        printFreq(arr, N);    return 0;    }    // This code is contributed by codersaty
// Java program for the above approachimport java.io.*;import java.lang.*;import java.util.*; class GFG {     // Function to print the frequency    // of each element of the sorted array    static void printFreq(int arr[], int N)    {         // Stores the frequency of an element        int freq = 1;         // Traverse the array arr[]        for (int i = 1; i < N; i++) {            // If the current element is equal            // to the previous element            if (arr[i] == arr[i - 1]) {                // Increment the freq by 1                freq++;            }             // Otherwise,            else {                System.out.println("Frequency of "                                   + arr[i - 1]                                   + " is: " + freq);                // Update freq                freq = 1;            }        }         // Print the frequency of the last element        System.out.println("Frequency of "                           + arr[N - 1]                           + " is: " + freq);    }     // Driver Code    public static void main(String args[])    {        // Given Input        int arr[]            = { 1, 1, 1, 2, 3, 3, 5, 5,                8, 8, 8, 9, 9, 10 };        int N = arr.length;         // Function Call        printFreq(arr, N);    }}
# Python3 program for the above approach # Function to print the frequency# of each element of the sorted arraydef printFreq(arr, N):       # Stores the frequency of an element    freq = 1     # Traverse the array arr[]    for i in range(1, N, 1):               # If the current element is equal        # to the previous element        if (arr[i] == arr[i - 1]):                       # Increment the freq by 1            freq += 1         # Otherwise,        else:            print("Frequency of",arr[i - 1],"is:",freq)                # Update freq            freq = 1     # Print the frequency of the last element    print("Frequency of",arr[N - 1],"is:",freq) # Driver Codeif __name__ == '__main__':       # Given Input    arr = [1, 1, 1, 2, 3, 3, 5, 5,8, 8, 8, 9, 9, 10]    N = len(arr)     # Function Call    printFreq(arr, N)         # This code is contributed by ipg2016107.
// C# program for the above approachusing System; public class GFG{     // Function to print the frequency// of each element of the sorted arraystatic void printFreq(int[] arr, int N){     // Stores the frequency of an element    int freq = 1;     // Traverse the array arr[]    for (int i = 1; i < N; i++)    {       // If the current element is equal      // to the previous element      if (arr[i] == arr[i - 1])      {         // Increment the freq by 1        freq++;      }       // Otherwise,      else {        Console.WriteLine("Frequency of " + arr[i - 1] + " is: " + freq);        // Update freq        freq = 1;      }    }     // Print the frequency of the last element    Console.WriteLine("Frequency of " + arr[N - 1] + " is: " + freq);} // Driver Codestatic public void Main (){     // Given Input    int[] arr = { 1, 1, 1, 2, 3, 3, 5, 5,                  8, 8, 8, 9, 9, 10 };    int N = arr.Length;           // Function Call    printFreq(arr, N);}} // This code is contributed by Dharanendra L V.
<script> // JavaScript program for the above approach // Function to print the frequency// of each element of the sorted arrayfunction printFreq(arr, N){         // Stores the frequency of an element    let freq = 1;     // Traverse the array arr[]    for(let i = 1; i < N; i++)    {                 // If the current element is equal        // to the previous element        if (arr[i] == arr[i - 1])        {                         // Increment the freq by 1            freq++;        }         // Otherwise,        else        {            document.write("Frequency of " +                           parseInt(arr[i - 1]) + " is: " +                           parseInt(freq) + "<br>");                                        // Update freq            freq = 1;        }    }     // Print the frequency of the last element    document.write("Frequency of " +                   parseInt(arr[N - 1]) + " is: " +                   parseInt(freq) + "<br>");} // Driver Code // Given Inputlet arr = [ 1, 1, 1, 2, 3, 3, 5, 5,            8, 8, 8, 9, 9, 10 ];let N = arr.length; // Function CallprintFreq(arr, N); // This code is contributed by Potta Lokesh </script>
Frequency of 1 is: 3
Frequency of 2 is: 1
Frequency of 3 is: 2
Frequency of 5 is: 2
Frequency of 8 is: 3
Frequency of 9 is: 2
Frequency of 10 is: 1
Time Complexity: O(N)Auxiliary Space: O(1)
CoderSaty
lokeshpotta20
ipg2016107
dharanendralv23
frequency-counting
Arrays
Hash
Searching
Arrays
Searching
Hash
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Count pairs with given sum
Chocolate Distribution Problem
Window Sliding Technique
Reversal algorithm for array rotation
Next Greater Element
Internal Working of HashMap in Java
Count pairs with given sum
Hashing | Set 1 (Introduction)
Hashing | Set 3 (Open Addressing)
Hashing | Set 2 (Separate Chaining)