Find the frequency of a number in an array
Last Updated :
24 Mar, 2023
Given an array, a[], and an element x, find a number of occurrences of x in a[].
Examples:
Input : a[] = {0, 5, 5, 5, 4}
x = 5
Output : 3
Input : a[] = {1, 2, 3}
x = 4
Output : 0
If array is not sorted
The idea is simple, we initialize count as 0. We traverse the array in a linear fashion. For every element that matches with x, we increment count. Finally, we return count.
Below is the implementation of the approach.
C++
Java
Python3
def frequency(a, x):
count = 0
for i in a:
if i = = x: count + = 1
return count
a = [ 0 , 5 , 5 , 5 , 4 ]
x = 5
print (frequency(a, x))
|
C#
using System;
class GFG {
static int frequency( int []a,
int n, int x)
{
int count = 0;
for ( int i=0; i < n; i++)
if (a[i] == x)
count++;
return count;
}
static public void Main (){
int []a = {0, 5, 5, 5, 4};
int x = 5;
int n = a.Length;
Console.Write(frequency(a, n, x));
}
}
|
PHP
<?php
function frequency( $a , $n , $x )
{
$count = 0;
for ( $i = 0; $i < $n ; $i ++)
if ( $a [ $i ] == $x )
$count ++;
return $count ;
}
$a = array (0, 5, 5, 5, 4);
$x = 5;
$n = sizeof( $a );
echo frequency( $a , $n , $x );
?>
|
Javascript
<script>
function frequency(a, n, x)
{
let count = 0;
for (let i=0; i < n; i++)
if (a[i] == x)
count++;
return count;
}
let a = [0, 5, 5, 5, 4];
let x = 5;
let n = a.length;
document.write(frequency(a, n, x));
</script>
|
Time Complexity: O(n)
Auxiliary Space: O(1)
If the array is sorted
We can apply methods for both sorted and unsorted. But for a sorted array, we can optimize it to work in O(Log n) time using Binary Search. Please refer to below article for details.Count number of occurrences (or frequency) in a sorted array.
If there are multiple queries on a single array
We can use hashing to store frequencies of all elements. Then we can answer all queries in O(1) time. Please refer Frequency of each element in an unsorted array for details.
Implementation:
CPP
#include <bits/stdc++.h>
using namespace std;
unordered_map< int , int > hm;
void countFreq( int a[], int n)
{
for ( int i=0; i<n; i++)
hm[a[i]]++;
}
int query( int x)
{
return hm[x];
}
int main()
{
int a[] = {1, 3, 2, 4, 2, 1};
int n = sizeof (a)/ sizeof (a[0]);
countFreq(a, n);
cout << query(2) << endl;
cout << query(3) << endl;
cout << query(5) << endl;
return 0;
}
|
Java
import java.io.*;
import java.util.*;
class GFG {
static HashMap <Integer, Integer> hm = new HashMap<Integer, Integer>();
static void countFreq( int a[], int n)
{
for ( int i= 0 ; i<n; i++)
if (hm.containsKey(a[i]) )
hm.put(a[i], hm.get(a[i]) + 1 );
else hm.put(a[i] , 1 );
}
static int query( int x)
{
if (hm.containsKey(x))
return hm.get(x);
return 0 ;
}
public static void main (String[] args) {
int a[] = { 1 , 3 , 2 , 4 , 2 , 1 };
int n = a.length;
countFreq(a, n);
System.out.println(query( 2 ));
System.out.println(query( 3 ));
System.out.println(query( 5 ));
}
}
|
Python3
hm = {}
def countFreq(a):
global hm
for i in a:
if i in hm: hm[i] + = 1
else : hm[i] = 1
def query(x):
if x in hm:
return hm[x]
return 0
a = [ 1 , 3 , 2 , 4 , 2 , 1 ]
countFreq(a)
print (query( 2 ))
print (query( 3 ))
print (query( 5 ))
|
C#
using System;
using System.Collections.Generic;
class GFG
{
static Dictionary < int , int > hm = new Dictionary< int , int >();
static void countFreq( int []a, int n)
{
for ( int i = 0; i < n; i++)
if (hm.ContainsKey(a[i]) )
hm[a[i]] = hm[a[i]] + 1;
else hm.Add(a[i], 1);
}
static int query( int x)
{
if (hm.ContainsKey(x))
return hm[x];
return 0;
}
public static void Main(String[] args)
{
int []a = {1, 3, 2, 4, 2, 1};
int n = a.Length;
countFreq(a, n);
Console.WriteLine(query(2));
Console.WriteLine(query(3));
Console.WriteLine(query(5));
}
}
|
Javascript
<script>
var hm = new Map();
function countFreq(a, n)
{
for ( var i=0; i<n; i++)
{
if (hm.has(a[i]))
{
hm.set(a[i], hm.get(a[i])+1);
}
else
{
hm.set(a[i], 1);
}
}
}
function query(x)
{
if (hm.has(x))
{
return hm.get(x);
}
return 0;
}
var a = [1, 3, 2, 4, 2, 1];
var n = a.length;
countFreq(a, n);
document.write( query(2) + "<br>" );
document.write( query(3) + "<br>" );
document.write( query(5) + "<br>" );
</script>
|
Time complexity: O(n) where n is the number of elements in the given array.
Auxiliary space: O(n) because using extra space for unordered_map.
Approach 2 :
In this approach I am using C++ STL functions only with below conditions.
Conditions :
- To find the counts of digit we can’t use count_if() and count() functions.
- Use STL and lambda functions only.
Examples :
Input : v = {7,2,3,1,7,6,7,1,3,7} digit = 7
Output : 4
Input : v = {7,2,3,1,7,6,7,1,3,7} digit = 10
Output : 0
Explanation :
To find the occurrence of a digit with these conditions follow the below steps,
1. Use partition(start, end, condition) function to get all the digits and return the pointer of the last digit.
2. Use the distance(start , end) to get the distance from vector starting point to the last digit pointer which partition() function returns.
So, distance() function returns the occurrence of the digit and we can print it.
Below is the implementation of the above approach:
C++
#include <iostream>
using namespace std;
#include <algorithm>
#include <vector>
int main()
{
int digit;
digit = 7;
vector< int > v{ 7, 2, 3, 1, 7, 6, 7, 1, 3, 7 };
auto itr
= partition(v.begin(), v.end(),
[&digit]( int x) { return x == digit; });
int count = distance(v.begin(), itr);
cout << count << endl;
return 0;
}
|
Java
import java.util.*;
import java.util.stream.*;
class Main {
public static void main(String[] args) {
int digit;
digit = 7 ;
List<Integer> v = Arrays.asList( 7 , 2 , 3 , 1 , 7 , 6 , 7 , 1 , 3 , 7 );
List<Integer> partitioned = v.stream().filter(x -> x == digit).collect(Collectors.toList());
int count = partitioned.size();
System.out.println(count);
}
}
|
C#
using System;
using System.Collections.Generic;
using System.Linq;
public class GFG
{
static public void Main()
{
int digit;
digit = 7;
List< int > v = new List< int > { 7, 2, 3, 1, 7, 6, 7, 1, 3, 7 };
var partitioned = v.Where(x => x == digit).ToList();
int count = partitioned.Count();
Console.WriteLine(count);
}
}
|
Python
digit = 7
v = [ 7 , 2 , 3 , 1 , 7 , 6 , 7 , 1 , 3 , 7 ]
itr = filter ( lambda x: x = = digit, v)
count = len ( list (itr))
print (count)
|
Javascript
let digit;
digit = 7;
let v = [7, 2, 3, 1, 7, 6, 7, 1, 3, 7];
let itr = v.filter(x => x === digit);
let count = itr.length;
console.log(count);
|
Time Complexity: O(N)
Auxiliary Space: O(1)
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...