Check for Majority Element in a sorted array - GeeksforGeeks

03 Mar, 2022
Question: Write a C function to find if a given integer x appears more than n/2 times in a sorted array of n integers. Basically, we need to write a function say isMajority() that takes an array (arr[] ), array’s size (n) and a number to be searched (x) as parameters and returns true if x is a majority element (present more than n/2 times).
Examples: 
Input: arr[] = {1, 2, 3, 3, 3, 3, 10}, x = 3
Output: True (x appears more than n/2 times in the given array)

Input: arr[] = {1, 1, 2, 4, 4, 4, 6, 6}, x = 4
Output: False (x doesn't appear more than n/2 times in the given array)

Input: arr[] = {1, 1, 1, 2, 2}, x = 1
Output: True (x appears more than n/2 times in the given array)
METHOD 1 (Using Linear Search) Linearly search for the first occurrence of the element, once you find it (let at index i), check element at index i + n/2. If element is present at i+n/2 then return 1 else return 0.
C++
C
Java
Python3
C#
PHP
Javascript
/* C++ Program to check for majority element in a sorted array */#include<bits/stdc++.h>using namespace std; bool isMajority(int arr[], int n, int x){    int i;     /* get last index according to n (even or odd) */    int last_index = n % 2 ? (n / 2 + 1): (n / 2);     /* search for first occurrence of x in arr[]*/    for (i = 0; i < last_index; i++)    {               /* check if x is present and is present more than n/2        times */        if (arr[i] == x && arr[i + n / 2] == x)            return 1;    }    return 0;} /* Driver code */int main(){    int arr[] ={1, 2, 3, 4, 4, 4, 4};    int n = sizeof(arr)/sizeof(arr[0]);    int x = 4;    if (isMajority(arr, n, x))        cout <<    x <<" appears more than "<<                              n/2 << " times in arr[]"<< endl;    else        cout <<x <<" does not appear more than" << n/2 <<"  times in arr[]" << endl; return 0;} // This code is contributed by shivanisinghss2110
/* C Program to check for majority element in a sorted array */# include <stdio.h># include <stdbool.h> bool isMajority(int arr[], int n, int x){    int i;     /* get last index according to n (even or odd) */    int last_index = n%2? (n/2+1): (n/2);     /* search for first occurrence of x in arr[]*/    for (i = 0; i < last_index; i++)    {        /* check if x is present and is present more than n/2           times */        if (arr[i] == x && arr[i+n/2] == x)            return 1;    }    return 0;} /* Driver program to check above function */int main(){     int arr[] ={1, 2, 3, 4, 4, 4, 4};     int n = sizeof(arr)/sizeof(arr[0]);     int x = 4;     if (isMajority(arr, n, x))        printf("%d appears more than %d times in arr[]",               x, n/2);     else        printf("%d does not appear more than %d times in arr[]",                x, n/2);    return 0;}
/* Program to check for majority element in a sorted array */import java.io.*; class Majority {     static boolean isMajority(int arr[], int n, int x)    {        int i, last_index = 0;         /* get last index according to n (even or odd) */        last_index = (n%2==0)? n/2: n/2+1;         /* search for first occurrence of x in arr[]*/        for (i = 0; i < last_index; i++)        {            /* check if x is present and is present more               than n/2 times */            if (arr[i] == x && arr[i+n/2] == x)                return true;        }        return false;    }     /* Driver function to check for above functions*/    public static void main (String[] args) {        int arr[] = {1, 2, 3, 4, 4, 4, 4};        int n = arr.length;        int x = 4;        if (isMajority(arr, n, x)==true)           System.out.println(x+" appears more than "+                              n/2+" times in arr[]");        else           System.out.println(x+" does not appear more than "+                              n/2+" times in arr[]");    }}/*This article is contributed by Devesh Agrawal*/
'''Python3 Program to check for majority element in a sorted array''' def isMajority(arr, n, x):    # get last index according to n (even or odd) */    last_index = (n//2 + 1) if n % 2 == 0 else (n//2)     # search for first occurrence of x in arr[]*/    for i in range(last_index):        # check if x is present and is present more than n / 2 times */        if arr[i] == x and arr[i + n//2] == x:            return 1 # Driver program to check above function */arr = [1, 2, 3, 4, 4, 4, 4]n = len(arr)x = 4if (isMajority(arr, n, x)):    print ("% d appears more than % d times in arr[]"                                            %(x, n//2))else:    print ("% d does not appear more than % d times in arr[]"                                                    %(x, n//2))  # This code is contributed by shreyanshi_arun.
// C# Program to check for majority// element in a sorted arrayusing System; class GFG {    static bool isMajority(int[] arr,                            int n, int x)    {        int i, last_index = 0;         // Get last index according to        // n (even or odd)        last_index = (n % 2 == 0) ? n / 2 :                                    n / 2 + 1;         // Search for first occurrence        // of x in arr[]        for (i = 0; i < last_index; i++) {            // Check if x is present and            // is present more than n/2 times            if (arr[i] == x && arr[i + n / 2] == x)                return true;        }        return false;    }     // Driver code    public static void Main()    {        int[] arr = { 1, 2, 3, 4, 4, 4, 4 };        int n = arr.Length;        int x = 4;        if (isMajority(arr, n, x) == true)            Console.Write(x + " appears more than " +                            n / 2 + " times in arr[]");        else            Console.Write(x + " does not appear more than " +                             n / 2 + " times in arr[]");    }} // This code is contributed by Sam007
<?php// PHP Program to check for// majority element in a// sorted array // function returns majority// element in a sorted arrayfunction isMajority($arr, $n, $x){    $i;     // get last index according    // to n (even or odd)    $last_index = $n % 2? ($n / 2 + 1): ($n / 2);     // search for first occurrence    // of x in arr[]    for ($i = 0; $i < $last_index; $i++)    {                 // check if x is present and        // is present more than n/2        // times        if ($arr[$i] == $x && $arr[$i + $n / 2] == $x)            return 1;    }    return 0;}     // Driver Code    $arr = array(1, 2, 3, 4, 4, 4, 4);    $n = sizeof($arr);    $x = 4;    if (isMajority($arr, $n, $x))        echo $x, " appears more than "             , floor($n / 2), " times in arr[]";             else        echo $x, "does not appear more than "              , floor($n / 2), "times in arr[]";                 // This code is contributed by Ajit?>
<script>     // Javascript Program to check for majority    // element in a sorted array         function isMajority(arr, n, x)    {        let i, last_index = 0;          // Get last index according to        // n (even or odd)        last_index = (n % 2 == 0) ?        parseInt(n / 2, 10) : parseInt(n / 2, 10) + 1;          // Search for first occurrence        // of x in arr[]        for (i = 0; i < last_index; i++) {            // Check if x is present and            // is present more than n/2 times            if (arr[i] == x && arr[i +            parseInt(n / 2, 10)] == x)                return true;        }        return false;    }           let arr = [ 1, 2, 3, 4, 4, 4, 4 ];    let n = arr.length;    let x = 4;    if (isMajority(arr, n, x) == true)      document.write(x + " appears more than " +      parseInt(n / 2, 10) + " times in arr[]");    else      document.write(x + " does not appear more than " +      parseInt(n / 2, 10) + " times in arr[]");                              </script>
Output: 
4 appears more than 3 times in arr[]
Time Complexity: O(n)
Auxiliary Space: O(1)
METHOD 2 (Using Binary Search) Use binary search methodology to find the first occurrence of the given number. The criteria for binary search is important here. 
C++
C
Java
Python3
C#
Javascript
// C++ program to check for majority// element in a sorted array#include<bits/stdc++.h>using namespace std; // If x is present in arr[low...high]// then returns the index of first// occurrence of x, otherwise returns -1int _binarySearch(int arr[], int low,                  int high, int x); // This function returns true if the x// is present more than n/2 times in// arr[] of size nbool isMajority(int arr[], int n, int x){         // Find the index of first occurrence    // of x in arr[]    int i = _binarySearch(arr, 0, n - 1, x);     // If element is not present at all,    // return false    if (i == -1)        return false;     // Check if the element is present    // more than n/2 times    if (((i + n / 2) <= (n - 1)) &&      arr[i + n / 2] == x)        return true;    else        return false;} // If x is present in arr[low...high] then// returns the index of first occurrence// of x, otherwise returns -1int _binarySearch(int arr[], int low,                  int high, int x){    if (high >= low)    {        int mid = (low + high)/2; /*low + (high - low)/2;*/         /* Check if arr[mid] is the first occurrence of x.            arr[mid] is first occurrence if x is one of            the following is true:            (i) mid == 0 and arr[mid] == x            (ii) arr[mid-1] < x and arr[mid] == x        */        if ((mid == 0 || x > arr[mid - 1]) &&            (arr[mid] == x) )            return mid;                     else if (x > arr[mid])            return _binarySearch(arr, (mid + 1),                                 high, x);        else            return _binarySearch(arr, low,                                 (mid - 1), x);    }    return -1;} // Driver codeint main(){    int arr[] = { 1, 2, 3, 3, 3, 3, 10 };    int n = sizeof(arr) / sizeof(arr[0]);    int x = 3;         if (isMajority(arr, n, x))        cout << x << " appears more than "             << n / 2 << " times in arr[]"             << endl;    else        cout << x << " does not appear more than"             << n / 2 << "  times in arr[]" << endl;      return 0;} // This code is contributed by shivanisinghss2110
/* C Program to check for majority element in a sorted array */# include <stdio.h># include <stdbool.h> /* If x is present in arr[low...high] then returns the index offirst occurrence of x, otherwise returns -1 */int _binarySearch(int arr[], int low, int high, int x); /* This function returns true if the x is present more than n/2times in arr[] of size n */bool isMajority(int arr[], int n, int x){    /* Find the index of first occurrence of x in arr[] */    int i = _binarySearch(arr, 0, n-1, x);     /* If element is not present at all, return false*/    if (i == -1)        return false;     /* check if the element is present more than n/2 times */    if (((i + n/2) <= (n -1)) && arr[i + n/2] == x)        return true;    else        return false;} /* If x is present in arr[low...high] then returns the index offirst occurrence of x, otherwise returns -1 */int _binarySearch(int arr[], int low, int high, int x){    if (high >= low)    {        int mid = (low + high)/2; /*low + (high - low)/2;*/         /* Check if arr[mid] is the first occurrence of x.            arr[mid] is first occurrence if x is one of the following            is true:            (i) mid == 0 and arr[mid] == x            (ii) arr[mid-1] < x and arr[mid] == x        */        if ( (mid == 0 || x > arr[mid-1]) && (arr[mid] == x) )            return mid;        else if (x > arr[mid])            return _binarySearch(arr, (mid + 1), high, x);        else            return _binarySearch(arr, low, (mid -1), x);    }     return -1;} /* Driver program to check above functions */int main(){    int arr[] = {1, 2, 3, 3, 3, 3, 10};    int n = sizeof(arr)/sizeof(arr[0]);    int x = 3;    if (isMajority(arr, n, x))        printf("%d appears more than %d times in arr[]",               x, n/2);    else        printf("%d does not appear more than %d times in arr[]",               x, n/2);    return 0;}
/* Java Program to check for majority element in a sorted array */import java.io.*; class Majority {     /* If x is present in arr[low...high] then returns the index of        first occurrence of x, otherwise returns -1 */    static int  _binarySearch(int arr[], int low, int high, int x)    {        if (high >= low)        {            int mid = (low + high)/2;  /*low + (high - low)/2;*/             /* Check if arr[mid] is the first occurrence of x.                arr[mid] is first occurrence if x is one of the following                is true:                (i)  mid == 0 and arr[mid] == x                (ii) arr[mid-1] < x and arr[mid] == x            */            if ( (mid == 0 || x > arr[mid-1]) && (arr[mid] == x) )                return mid;            else if (x > arr[mid])                return _binarySearch(arr, (mid + 1), high, x);            else                return _binarySearch(arr, low, (mid -1), x);        }         return -1;    }      /* This function returns true if the x is present more than n/2        times in arr[] of size n */    static boolean isMajority(int arr[], int n, int x)    {        /* Find the index of first occurrence of x in arr[] */        int i = _binarySearch(arr, 0, n-1, x);         /* If element is not present at all, return false*/        if (i == -1)            return false;         /* check if the element is present more than n/2 times */        if (((i + n/2) <= (n -1)) && arr[i + n/2] == x)            return true;        else            return false;    }     /*Driver function to check for above functions*/    public static void main (String[] args)  {         int arr[] = {1, 2, 3, 3, 3, 3, 10};        int n = arr.length;        int x = 3;        if (isMajority(arr, n, x)==true)            System.out.println(x + " appears more than "+                              n/2 + " times in arr[]");        else            System.out.println(x + " does not appear more than " +                              n/2 + " times in arr[]");    }}/*This code is contributed by Devesh Agrawal*/
'''Python3 Program to check for majority element in a sorted array''' # This function returns true if the x is present more than n / 2# times in arr[] of size n */def isMajority(arr, n, x):         # Find the index of first occurrence of x in arr[] */    i = _binarySearch(arr, 0, n-1, x)     # If element is not present at all, return false*/    if i == -1:        return False     # check if the element is present more than n / 2 times */    if ((i + n//2) <= (n -1)) and arr[i + n//2] == x:        return True    else:        return False # If x is present in arr[low...high] then returns the index of# first occurrence of x, otherwise returns -1 */def _binarySearch(arr, low, high, x):    if high >= low:        mid = (low + high)//2 # low + (high - low)//2;         ''' Check if arr[mid] is the first occurrence of x.            arr[mid] is first occurrence if x is one of the following            is true:            (i) mid == 0 and arr[mid] == x            (ii) arr[mid-1] < x and arr[mid] == x'''                 if (mid == 0 or x > arr[mid-1]) and (arr[mid] == x):            return mid        elif x > arr[mid]:            return _binarySearch(arr, (mid + 1), high, x)        else:            return _binarySearch(arr, low, (mid -1), x)    return -1  # Driver program to check above functions */arr = [1, 2, 3, 3, 3, 3, 10]n = len(arr)x = 3if (isMajority(arr, n, x)):    print ("% d appears more than % d times in arr[]"                                            % (x, n//2))else:    print ("% d does not appear more than % d times in arr[]"                                                    % (x, n//2)) # This code is contributed by shreyanshi_arun.
// C# Program to check for majority// element in a sorted array */using System; class GFG {     // If x is present in arr[low...high]    // then returns the index of first    // occurrence of x, otherwise returns -1    static int _binarySearch(int[] arr, int low,                               int high, int x)    {        if (high >= low) {            int mid = (low + high) / 2;            //low + (high - low)/2;             // Check if arr[mid] is the first            // occurrence of x.    arr[mid] is            // first occurrence if x is one of            // the following is true:            // (i) mid == 0 and arr[mid] == x            // (ii) arr[mid-1] < x and arr[mid] == x                         if ((mid == 0 || x > arr[mid - 1]) &&                                 (arr[mid] == x))                return mid;            else if (x > arr[mid])                return _binarySearch(arr, (mid + 1),                                           high, x);            else                return _binarySearch(arr, low,                                      (mid - 1), x);        }         return -1;    }     // This function returns true if the x is    // present more than n/2 times in arr[]    // of size n    static bool isMajority(int[] arr, int n, int x)    {                 // Find the index of first occurrence        // of x in arr[]        int i = _binarySearch(arr, 0, n - 1, x);         // If element is not present at all,        // return false        if (i == -1)            return false;         // check if the element is present        // more than n/2 times        if (((i + n / 2) <= (n - 1)) &&                                arr[i + n / 2] == x)            return true;        else            return false;    }     //Driver code    public static void Main()    {         int[] arr = { 1, 2, 3, 3, 3, 3, 10 };        int n = arr.Length;        int x = 3;        if (isMajority(arr, n, x) == true)           Console.Write(x + " appears more than " +                             n / 2 + " times in arr[]");        else           Console.Write(x + " does not appear more than " +                             n / 2 + " times in arr[]");    }} // This code is contributed by Sam007
<script>    // Javascript Program to check for majority    // element in a sorted array */         // If x is present in arr[low...high]    // then returns the index of first    // occurrence of x, otherwise returns -1    function _binarySearch(arr, low, high, x)    {        if (high >= low) {            let mid = parseInt((low + high) / 2, 10);            //low + (high - low)/2;              // Check if arr[mid] is the first            // occurrence of x.    arr[mid] is            // first occurrence if x is one of            // the following is true:            // (i) mid == 0 and arr[mid] == x            // (ii) arr[mid-1] < x and arr[mid] == x                          if ((mid == 0 || x > arr[mid - 1]) && (arr[mid] == x))                return mid;            else if (x > arr[mid])                return _binarySearch(arr, (mid + 1), high, x);            else                return _binarySearch(arr, low, (mid - 1), x);        }          return -1;    }      // This function returns true if the x is    // present more than n/2 times in arr[]    // of size n    function isMajority(arr, n, x)    {                  // Find the index of first occurrence        // of x in arr[]        let i = _binarySearch(arr, 0, n - 1, x);          // If element is not present at all,        // return false        if (i == -1)            return false;          // check if the element is present        // more than n/2 times        if (((i + parseInt(n / 2, 10)) <= (n - 1)) && arr[i + parseInt(n / 2, 10)] == x)            return true;        else            return false;    }         let arr = [ 1, 2, 3, 3, 3, 3, 10 ];    let n = arr.length;    let x = 3;    if (isMajority(arr, n, x) == true)      document.write(x + " appears more than " + parseInt(n / 2, 10) + " times in arr[]");    else      document.write(x + " does not appear more than " + parseInt(n / 2, 10) + " times in arr[]");     </script>
Output: 
3 appears more than 3 times in arr[]
Time Complexity: O(Logn) 
Auxiliary Space: O(1)Algorithmic Paradigm: Divide and Conquer
METHOD 3: If it is already given that the array is sorted and there exists a majority element, checking if a particular element is as easy as checking if the middle element of the array is the number we are checking against.
Since a majority element occurs more than n/2 times in an array, it will always be the middle element. We can use this logic to check if the given number is the majority element.
C++
C
Java
Python3
C#
Javascript
#include <iostream>using namespace std; bool isMajorityElement(int arr[], int n, int key){    if (arr[n / 2] == key)        return true;    else        return false;} int main(){    int arr[] = { 1, 2, 3, 3, 3, 3, 10 };    int n = sizeof(arr) / sizeof(arr[0]);    int x = 3;    if (isMajorityElement(arr, n, x))        cout << x << " appears more than "             << n / 2 << " times in arr[]"             << endl;    else        cout << x << " does not appear more than"             << n / 2 << "  times in arr[]" << endl;       return 0;} // This code is contributed by shivanisinghss2110
#include <stdio.h>#include <stdbool.h>  bool isMajorityElement(int arr[], int n, int key){    if (arr[n / 2] == key)        return true;    else        return false;} int main(){    int arr[] = { 1, 2, 3, 3, 3, 3, 10 };    int n = sizeof(arr) / sizeof(arr[0]);    int x = 3;    if (isMajorityElement(arr, n, x))        printf("%d appears more than %d times in arr[]", x,            n / 2);    else        printf("%d does not appear more than %d times in "            "arr[]",            x, n / 2);    return 0;}
import java.util.*; class GFG{ static boolean isMajorityElement(int arr[], int n,                                 int key){    if (arr[n / 2] == key)        return true;    else        return false;} // Driver Codepublic static void main(String[] args){    int arr[] = { 1, 2, 3, 3, 3, 3, 10 };    int n = arr.length;    int x = 3;         if (isMajorityElement(arr, n, x))        System.out.printf("%d appears more than %d " +                          "times in arr[]", x, n / 2);    else        System.out.printf("%d does not appear more " +                          "than %d times in " + "arr[]",                          x, n / 2);}} // This code is contributed by aashish1995
def isMajorityElement(arr,                      n, key):    if (arr[n // 2] == key):        return True        return False # Driver codeif __name__ == "__main__":     arr = [1, 2, 3, 3,           3, 3, 10]    n = len(arr)    x = 3         if (isMajorityElement(arr, n, x)):        print(x, " appears more than ",              n // 2 , " times in arr[]")    else:        print(x, " does not appear more than",              n // 2, " times in arr[]") # This code is contributed by Chitranayal
using System;class GFG{ static bool isMajorityElement(int []arr, int n,                                 int key){    if (arr[n / 2] == key)        return true;    else        return false;} // Driver Codepublic static void Main(String[] args){    int []arr = { 1, 2, 3, 3, 3, 3, 10 };    int n = arr.Length;    int x = 3;         if (isMajorityElement(arr, n, x))        Console.Write(x + " appears more than " + n/2 +                          " times in []arr");    else        Console.Write(x + " does not appear more " +                          "than " + n/2 + " times in arr[]");}} // This code is contributed by aashish1995
<script>     function isMajorityElement(arr, n, key)    {        if (arr[parseInt(n / 2, 10)] == key)            return true;        else            return false;    }         let arr = [ 1, 2, 3, 3, 3, 3, 10 ];    let n = arr.length;    let x = 3;          if (isMajorityElement(arr, n, x))        document.write(x + " appears more than " +        parseInt(n/2, 10) + " times in arr[]");    else        document.write(x + " does not appear more " +      "than " + parseInt(n/2, 10) + " times in arr[]");       </script>
3 appears more than 3 times in arr[]
Time complexity: O(1)Auxiliary Space: O(1)
Please write comments if you find any bug in the above program/algorithm or a better way to solve the same problem.
jit_t
_np_
ukasp
aashish1995
shivanisinghss2110
rameshtravel07
suresh07
divyeshrabadiya07
rohitsingh07052
Binary Search
Arrays
Divide and Conquer
Arrays
Divide and Conquer
Binary Search
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Next Greater Element
Window Sliding Technique
Count pairs with given sum
Program to find sum of elements in a given array
Reversal algorithm for array rotation
QuickSort
Merge Sort
Binary Search
Program for Tower of Hanoi
Divide and Conquer Algorithm | Introduction