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 array. For every element, count its occurrences. If 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.

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right



Output:

Yes

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.




My Personal Notes arrow_drop_up

Recommended Posts:

    Article Tags :
    Practice Tags :


    3


    Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.