Open In App

Check if an array has a majority element

Given an array, the task is to find if the input array contains a majority element or not. An element is 

Examples: 

Input : arr[] = {2, 3, 9, 2, 2}
Output : Yes
A majority element 2 is present in arr[]

Input  : arr[] = {1, 8, 9, 2, 5}
Output : No

A simple solution is to traverse through the array. For every element, count its occurrences. If the count of occurrence of any element becomes n/2, we return true. 

An efficient solution is to use hashing. We count occurrences of all elements. If count becomes n/2 or more return true.

Below is the implementation of the approach.  




// Hashing based C++ program to find if there
// is a majority element in input array.
#include <bits/stdc++.h>
using namespace std;
 
// Returns true if there is a majority element
// in a[]
bool isMajority(int a[], int n)
{
    // Insert all elements in a hash table
    unordered_map<int, int> mp;
    for (int i = 0; i < n; i++)
        mp[a[i]]++;
     
    // Check if frequency of any element is
    // n/2 or more.
    for (auto x : mp)
      if (x.second >= n/2)
          return true;
    return false;
}
 
// Driver code
int main()
{
    int a[] = { 2, 3, 9, 2, 2 };
    int n = sizeof(a) / sizeof(a[0]);
    if (isMajority(a, n))
        cout << "Yes";
    else
        cout << "No";
    return 0;
}




// Hashing based Java program
// to find if there is a
// majority element in input array.
import java.util.*;
import java.lang.*;
import java.io.*;
 
class Gfg
{
    // Returns true if there is a
    // majority element in a[]
    static boolean isMajority(int a[], int n)
    {
        // Insert all elements
        // in a hash table
        HashMap <Integer,Integer> mp = new
                            HashMap<Integer,Integer>();
         
        for (int i = 0; i < n; i++)
         
            if (mp.containsKey(a[i]))
                mp.put(a[i], mp.get(a[i]) + 1);
         
            else mp.put(a[i] , 1);
         
        // Check if frequency of any
        // element is n/2 or more.
        for (Map.Entry<Integer, Integer> x : mp.entrySet())
            
            if (x.getValue() >= n/2)
                return true;
        return false;
    }
     
    // Driver code
    public static void main (String[] args)
    {
        int a[] = { 2, 3, 9, 2, 2 };
        int n = a.length;
         
        if (isMajority(a, n))
            System.out.println("Yes");
        else
            System.out.println("No");
    }
}
 
// This code is contributed by Ansu Kumari




# Hashing based Python
# program to find if
# there is a majority
# element in input array.
 
# Returns true if there
# is a majority element
# in a[]
def isMajority(a):
     
    # Insert all elements
    # in a hash table
    mp = {}
     
    for i in a:
        if i in mp: mp[i] += 1
        else: mp[i] = 1
     
    # Check if frequency
    # of any element is
    # n/2 or more.
    for x in mp:
        if mp[x] >= len(a)//2:
            return True
    return False
 
# Driver code
a = [ 2, 3, 9, 2, 2 ]
 
print("Yes" if isMajority(a) else "No")
 
#This code is contributed by Ansu Kumari




// Hashing based C# program
// to find if there is a
// majority element in input array.
using System;
using System.Collections.Generic;
 
class GFG
{
    // Returns true if there is a
    // majority element in a[]
    static Boolean isMajority(int []a, int n)
    {
        // Insert all elements
        // in a hash table
        Dictionary<int,
                   int> mp = new Dictionary<int,
                                            int>();
         
        for (int i = 0; i < n; i++)
        {
            if(mp.ContainsKey(a[i]))
            {
                var val = mp[a[i]];
                mp.Remove(a[i]);
                mp.Add(a[i], val + 1);
            }
            else
            {
                mp.Add(a[i], 1);
            }
        }
         
        // Check if frequency of any
        // element is n/2 or more.
        foreach(KeyValuePair<int, int> x in mp)
             
            if (x.Value >= n / 2)
                return true;
        return false;
    }
     
    // Driver code
    public static void Main (String[] args)
    {
        int []a = { 2, 3, 9, 2, 2 };
        int n = a.Length;
         
        if (isMajority(a, n))
            Console.WriteLine("Yes");
        else
            Console.WriteLine("No");
    }
}
 
// This code is contributed by PrinciRaj1992




<script>
// Hashing based Javascript program to find if there
// is a majority element in input array.
 
// Returns true if there is a majority element
// in a[]
function isMajority(a, n)
{
 
    // Insert all elements in a hash table
    let mp = new Map();
    for (let i = 0; i < n; i++){
        if(mp.has(a[i])){
            mp.set(a[i], mp.get(a[i]) + 1)
        }else{
            mp.set(a[i], 1)
        }
    }
     
    // Check if frequency of any element is
    // n/2 or more.
    for (let x of mp)
    if (x[1] >= n/2)
        return true;
    return false;
}
 
// Driver code
 
    let a = [ 2, 3, 9, 2, 2 ];
    let n = a.length;
    if (isMajority(a, n))
        document.write("Yes");
    else
        document.write("No");
         
        // This code is contributed by saurabh_jaiswal.
</script>

Output
Yes

Time Complexity: O(N)
Auxiliary Space: O(N)


Article Tags :