Most frequent element in an array
Last Updated :
13 Sep, 2024
Given an array, find the most frequent element in it. If there are multiple elements that appear a maximum number of times, print any one of them.
Examples:
Input : arr[] = {1, 3, 2, 1, 4, 1}
Output : 1
Explanation: 1 appears three times in array which is maximum frequency.
Input : arr[] = {10, 20, 10, 20, 30, 20, 20}
Output : 20 appears four times in array which is maximum frequency
Naive Approach
The naive approach involves using two nested loops: the outer loop picks each element, and the inner loop counts the frequency of the picked element. This method is straightforward but inefficient.
C++
// CPP program to find the most frequent element in an array.
#include <bits/stdc++.h>
using namespace std;
int mostFrequent(int* arr, int n)
{
int maxcount = 0;
int element_having_max_freq;
for (int i = 0; i < n; i++) {
int count = 0;
for (int j = 0; j < n; j++) {
if (arr[i] == arr[j])
count++;
}
if (count > maxcount) {
maxcount = count;
element_having_max_freq = arr[i];
}
}
return element_having_max_freq;
}
// Driver program
int main()
{
int arr[] = { 40, 50, 30, 40, 50, 30, 30 };
int n = sizeof(arr) / sizeof(arr[0]);
cout << mostFrequent(arr, n);
return 0;
}
Java
// Java program to find the most frequent element
// in an array.
public class GFG
{
public static int mostFrequent(int[] arr, int n)
{
int maxcount = 0;
int element_having_max_freq = 0;
for (int i = 0; i < n; i++) {
int count = 0;
for (int j = 0; j < n; j++) {
if (arr[i] == arr[j]) {
count++;
}
}
if (count > maxcount) {
maxcount = count;
element_having_max_freq = arr[i];
}
}
return element_having_max_freq;
}
// Driver program
public static void main(String[] args)
{
int[] arr = { 40, 50, 30, 40, 50, 30, 30 };
int n = arr.length;
System.out.print(mostFrequent(arr, n));
}
}
Python
# Python3 program to find the most
# frequent element in an array.
def mostFrequent(arr, n):
maxcount = 0;
element_having_max_freq = 0;
for i in range(0, n):
count = 0
for j in range(0, n):
if(arr[i] == arr[j]):
count += 1
if(count > maxcount):
maxcount = count
element_having_max_freq = arr[i]
return element_having_max_freq;
# Driver Code
arr = [40,50,30,40,50,30,30]
n = len(arr)
print(mostFrequent(arr, n))
C#
// C# program to find the most frequent element
// in an array
using System;
public class GFG
{
// C# program to find the most frequent element
// in an array.
public static int mostFrequent(int[] arr, int n)
{
int maxcount = 0;
int element_having_max_freq = 0;
for (int i = 0; i < n; i++) {
int count = 0;
for (int j = 0; j < n; j++) {
if (arr[i] == arr[j]) {
count++;
}
}
if (count > maxcount) {
maxcount = count;
element_having_max_freq = arr[i];
}
}
return element_having_max_freq;
}
// Driver program
public static void Main(String[] args)
{
int[] arr = { 40, 50, 30, 40, 50, 30, 30 };
int n = arr.Length;
Console.Write(mostFrequent(arr, n));
}
}
JavaScript
// JavaScript program to find the most frequent element in an array
function mostFrequent(arr, n) {
let maxcount = 0;
let element_having_max_freq;
for (let i = 0; i < n; i++) {
let count = 0;
for (let j = 0; j < n; j++) {
if (arr[i] == arr[j]) {
count++;
}
}
if (count > maxcount) {
maxcount = count;
element_having_max_freq = arr[i];
}
}
return element_having_max_freq;
}
// Driver Code
let arr = [40, 50, 30, 40, 50, 30, 30];
let n = arr.length;
console.log(mostFrequent(arr, n));
Time complexity: O(n2) since 2 loops are running from i=0 to i=n we can improve its time complexity by taking a visited array and skipping numbers for which we already calculated the frequency.
Auxiliary space: O(1) as it is using constant space for variables
Using Sorting
This method sorts the array first and then finds the maximum frequency by linearly traversing the sorted array. Sorting brings similar elements next to each other, making frequency counting easier.
C++
// CPP program to find the most frequent element
// in an array.
#include <bits/stdc++.h>
using namespace std;
int mostFrequent(int arr[], int n)
{
// Sort the array
sort(arr, arr + n);
// Find the max frequency using linear traversal
int max_count = 1, res = arr[0], curr_count = 1;
for (int i = 1; i < n; i++) {
if (arr[i] == arr[i - 1])
curr_count++;
else
curr_count = 1;
if (curr_count > max_count) {
max_count = curr_count;
res = arr[i - 1];
}
}
return res;
}
// Driver program
int main()
{
int arr[] = { 40,50,30,40,50,30,30};
int n = sizeof(arr) / sizeof(arr[0]);
cout << mostFrequent(arr, n);
return 0;
}
C
// CPP program to find the most frequent element
// in an array.
#include <stdio.h>
#include <stdlib.h>
int cmpfunc(const void* a, const void* b)
{
return (*(int*)a - *(int*)b);
}
int mostFrequent(int arr[], int n)
{
// Sort the array
qsort(arr, n, sizeof(int), cmpfunc);
// find the max frequency using linear traversal
int max_count = 1, res = arr[0], curr_count = 1;
for (int i = 1; i < n; i++) {
if (arr[i] == arr[i - 1])
curr_count++;
else
curr_count = 1;
if (curr_count > max_count) {
max_count = curr_count;
res = arr[i - 1];
}
}
return res;
}
// driver program
int main()
{
int arr[] = { 40,50,30,40,50,30,30};
int n = sizeof(arr) / sizeof(arr[0]);
printf("%d", mostFrequent(arr, n));
return 0;
}
Java
// Java program to find the most frequent element
// in an array
import java.util.*;
class GFG {
static int mostFrequent(int arr[], int n)
{
// Sort the array
Arrays.sort(arr);
// find the max frequency using linear traversal
int max_count = 1, res = arr[0];
int curr_count = 1;
for (int i = 1; i < n; i++) {
if (arr[i] == arr[i - 1])
curr_count++;
else
curr_count = 1;
if (curr_count > max_count) {
max_count = curr_count;
res = arr[i - 1];
}
}
return res;
}
// Driver program
public static void main(String[] args)
{
int arr[] = { 40,50,30,40,50,30,30};
int n = arr.length;
System.out.println(mostFrequent(arr, n));
}
}
Python
# Python3 program to find the most
# frequent element in an array.
def mostFrequent(arr, n):
# Sort the array
arr.sort()
# find the max frequency using
# linear traversal
max_count = 1
res = arr[0]
curr_count = 1
for i in range(1, n):
if (arr[i] == arr[i - 1]):
curr_count += 1
else:
curr_count = 1
# If last element is most frequent
if (curr_count > max_count):
max_count = curr_count
res = arr[i - 1]
return res
# Driver Code
arr = [40,50,30,40,50,30,30]
n = len(arr)
print(mostFrequent(arr, n))
C#
// C# program to find the most
// frequent element in an array
using System;
class GFG {
static int mostFrequent(int[] arr, int n)
{
// Sort the array
Array.Sort(arr);
// find the max frequency using
// linear traversal
int max_count = 1, res = arr[0];
int curr_count = 1;
for (int i = 1; i < n; i++) {
if (arr[i] == arr[i - 1])
curr_count++;
else
curr_count = 1;
// If last element is most frequent
if (curr_count > max_count) {
max_count = curr_count;
res = arr[i - 1];
}
}
return res;
}
// Driver code
public static void Main()
{
int[] arr = {40,50,30,40,50,30,30 };
int n = arr.Length;
Console.WriteLine(mostFrequent(arr, n));
}
}
JavaScript
// JavaScript program to find the most frequent element
// in an array
function mostFrequent(arr, n)
{
// Sort the array
arr.sort();
// find the max frequency using linear
// traversal
let max_count = 1, res = arr[0];
let curr_count = 1;
for (let i = 1; i < n; i++) {
if (arr[i] == arr[i - 1])
curr_count++;
else
curr_count = 1;
if (curr_count > max_count) {
max_count = curr_count;
res = arr[i - 1];
}
}
return res;
}
let arr = [ 40, 50, 30, 40, 50, 30, 30 ];
let n = arr.length;
console.log(mostFrequent(arr, n));
PHP
<?php
// PHP program to find the
// most frequent element
// in an array.
function mostFrequent( $arr, $n)
{
// Sort the array
sort($arr);
sort($arr , $n);
// find the max frequency
// using linear traversal
$max_count = 1;
$res = $arr[0];
$curr_count = 1;
for ($i = 1; $i < $n; $i++)
{
if ($arr[$i] == $arr[$i - 1])
$curr_count++;
else
$curr_count = 1;
if ($curr_count > $max_count)
{
$max_count = $curr_count;
$res = $arr[$i - 1];
}
}
return $res;
}
// Driver Code
{
$arr = array(40,50,30,40,50,30,30);
$n = sizeof($arr) / sizeof($arr[0]);
echo mostFrequent($arr, $n);
return 0;
}
// This code is contributed by nitin mittal
?>
Time Complexity: O(nlog(n))
Auxiliary Space: O(1)
Using Hashing
Using a hash table, this approach stores each element’s frequency and then finds the element with the maximum frequency. This method is efficient in terms of both time and space.
C++
// CPP program to find the most frequent element
// in an array.
#include <bits/stdc++.h>
using namespace std;
int mostFrequent(int arr[], int n)
{
// Insert all elements in hash.
unordered_map<int, int> hash;
for (int i = 0; i < n; i++)
hash[arr[i]]++;
// find the max frequency
int max_count = 0, res = -1;
for (auto i : hash) {
if (max_count < i.second) {
res = i.first;
max_count = i.second;
}
}
return res;
}
int main()
{
int arr[] = {40,50,30,40,50,30,30 };
int n = sizeof(arr) / sizeof(arr[0]);
cout << mostFrequent(arr, n);
return 0;
}
Java
// Java program to find the most frequent element
// in an array
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
class GFG {
static int mostFrequent(int arr[], int n)
{
// Insert all elements in hash
Map<Integer, Integer> hp
= new HashMap<Integer, Integer>();
for (int i = 0; i < n; i++) {
int key = arr[i];
if (hp.containsKey(key)) {
int freq = hp.get(key);
freq++;
hp.put(key, freq);
}
else {
hp.put(key, 1);
}
}
// find max frequency.
int max_count = 0, res = -1;
for (Entry<Integer, Integer> val : hp.entrySet()) {
if (max_count < val.getValue()) {
res = val.getKey();
max_count = val.getValue();
}
}
return res;
}
public static void main(String[] args)
{
int arr[] = { 40, 50, 30, 40, 50, 30, 30 };
int n = arr.length;
System.out.println(mostFrequent(arr, n));
}
}
Python
# Python3 program to find the most
# frequent element in an array.
import math as mt
def mostFrequent(arr, n):
# Insert all elements in Hash.
Hash = dict()
for i in range(n):
if arr[i] in Hash.keys():
Hash[arr[i]] += 1
else:
Hash[arr[i]] = 1
# find the max frequency
max_count = 0
res = -1
for i in Hash:
if (max_count < Hash[i]):
res = i
max_count = Hash[i]
return res
arr = [ 40,50,30,40,50,30,30]
n = len(arr)
print(mostFrequent(arr, n))
C#
// C# program to find the most
// frequent element in an array
using System;
using System.Collections.Generic;
class GFG
{
static int mostFrequent(int []arr,
int n)
{
// Insert all elements in hash
Dictionary<int, int> hp =
new Dictionary<int, int>();
for (int i = 0; i < n; i++)
{
int key = arr[i];
if(hp.ContainsKey(key))
{
int freq = hp[key];
freq++;
hp[key] = freq;
}
else
hp.Add(key, 1);
}
// find max frequency.
int min_count = 0, res = -1;
foreach (KeyValuePair<int,
int> pair in hp)
{
if (min_count < pair.Value)
{
res = pair.Key;
min_count = pair.Value;
}
}
return res;
}
static void Main ()
{
int []arr = new int[]{40,50,30,40,50,30,30};
int n = arr.Length;
Console.Write(mostFrequent(arr, n));
}
}
JavaScript
// Javascript program to find
// the most frequent element
// in an array.
function mostFrequent(arr, n)
{
// Insert all elements in hash.
var hash = new Map();
for (var i = 0; i < n; i++) {
if (hash.has(arr[i]))
hash.set(arr[i], hash.get(arr[i]) + 1)
else hash.set(arr[i], 1)
}
// find the max frequency
var max_count = 0, res = -1;
hash.forEach((value, key) => {
if (max_count < value) {
res = key;
max_count = value;
}
});
return res;
}
var arr = [ 40, 50, 30, 40, 50, 30, 30 ];
var n = arr.length;
console.log(mostFrequent(arr, n));
Time Complexity: O(n)
Auxiliary Space: O(n)
Using Moore’s Voting Algorithm
Moore’s Voting Algorithm is a space-efficient algorithm that works well when the most frequent element (or majority element) occurs more than [Tex]n/2[/Tex] times. It finds the majority element by counting votes. However, this algorithm only guarantees correctness if there is an element that occurs more than [Tex]n/2[/Tex] times.
C++
#include <iostream>
using namespace std;
int findCandidate(int *arr, int n)
{
int res = 0;
int count = 1;
for (int i = 1; i < n; i++)
{
if (arr[i] == arr[res])
{
count++;
}
else
{
count--;
}
if (count == 0)
{
res = i;
count = 1;
}
}
return arr[res];
}
bool isMajority(int *arr, int n, int candidate)
{
int count = 0;
for (int i = 0; i < n; i++)
{
if (arr[i] == candidate)
count++;
}
return count > n / 2;
}
int main()
{
int arr[] = {30, 30, 30, 40, 50, 40, 50};
int n = sizeof(arr) / sizeof(arr[0]);
int candidate = findCandidate(arr, n);
if (isMajority(arr, n, candidate))
{
cout << "Element " << candidate << " occurs more than " << n / 2 << " times" << endl;
}
else
{
cout << "No element occurs more than " << n / 2 << " times" << endl;
}
return 0;
}
Java
import java.io.*;
class GFG {
static int findCandidate(int[] arr, int n)
{
// using moore's voting algorithm to find the
// candidate
int res = 0;
int count = 1;
for (int i = 1; i < n; i++) {
if (arr[i] == arr[res]) {
count++;
}
else {
count--;
}
if (count == 0) {
res = i;
count = 1;
}
}
return arr[res];
}
static boolean isMajority(int[] arr, int n,
int candidate)
{
// check if candidate is actually the majority
// element
int count = 0;
for (int i = 0; i < n; i++) {
if (arr[i] == candidate) {
count++;
}
}
return count > n / 2;
}
// Driver code
public static void main(String[] args)
{
int arr[] = { 30, 30, 30, 40, 50, 40, 50 };
int n = arr.length;
int candidate = findCandidate(arr, n);
if (isMajority(arr, n, candidate)) {
System.out.println("Element " + candidate
+ " occurs more than "
+ n / 2 + " times");
}
else {
System.out.println(
"No element occurs more than " + n / 2
+ " times");
}
}
}
C#
using System;
class GFG {
static int FindCandidate(int[] arr, int n)
{
// using moore's voting algorithm to find the
// candidate
int res = 0;
int count = 1;
for (int i = 1; i < n; i++) {
if (arr[i] == arr[res]) {
count++;
}
else {
count--;
}
if (count == 0) {
res = i;
count = 1;
}
}
return arr[res];
}
static bool IsMajority(int[] arr, int n, int candidate)
{
// check if candidate is actually the majority
// element
int count = 0;
for (int i = 0; i < n; i++) {
if (arr[i] == candidate) {
count++;
}
}
return count > n / 2;
}
// Driver code
public static void Main(string[] args)
{
int[] arr = { 30, 30, 30, 40, 50, 40, 50 };
int n = arr.Length;
int candidate = FindCandidate(arr, n);
if (IsMajority(arr, n, candidate)) {
Console.WriteLine("Element " + candidate
+ " occurs more than " + n / 2
+ " times");
}
else {
Console.WriteLine("No element occurs more than "
+ n / 2 + " times");
}
}
}
// This code is contributed by Mohammed Raziullah Ansari
JavaScript
function findCandidate(arr, n)
{
// using moore's voting algorithm to find the candidate
var res = 0;
var count = 1;
for (var i = 1; i < n; i++) {
if (arr[i] === arr[res]) {
count++;
}
else {
count--;
}
if (count === 0) {
res = i;
count = 1;
}
}
return arr[res];
}
function isMajority(arr, n, candidate)
{
// check if candidate is actually the majority element
var count = 0;
for (var i = 0; i < n; i++) {
if (arr[i] === candidate) {
count++;
}
}
return count > n / 2;
}
var arr = [ 30, 30, 30, 40, 50, 40, 50 ];
var n = arr.length;
var candidate = findCandidate(arr, n);
if (isMajority(arr, n, candidate)) {
console.log("Element " + candidate
+ " occurs more than " + n / 2 + " times");
}
else {
console.log("No element occurs more than " + n / 2 + " times" );
}
OutputElement 30 occurs 3 times
Time Complexity: O(n)
Auxiliary Space: O(1)
Note: Moore’s Voting Algorithm correctly identifies the majority element only if such an element exists. In cases where no element occurs more than n/2 times, the algorithm may produce an incorrect result.