# Check for Majority Element in a sorted array

• Difficulty Level : Easy
• Last Updated : 16 Jun, 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++ Program to check for majority element in a sorted array */``#include``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);``    ``int` `x = 4;``    ``if` `(isMajority(arr, n, x))``        ``cout <<    x <<``" appears more than "``<<``                              ``n/2 << ``" times in arr[]"``<< endl;``    ``else``        ``cout <

## C

 `/* C Program to check for majority element in a sorted array */``# include ``# include ` `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);``     ``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;``}`

## Java

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

 `'''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 ``=` `4``if` `(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#

 `// C# Program to check for majority``// element in a sorted array``using` `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

 ``

## Javascript

 ``

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++ program to check for majority``// element in a sorted array``#include``using` `namespace` `std;` `// If x is present in arr[low...high]``// then returns the index of first``// 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/2 times 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 of first 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 code``int` `main()``{``    ``int` `arr[] = { 1, 2, 3, 3, 3, 3, 10 };``    ``int` `n = ``sizeof``(arr) / ``sizeof``(arr);``    ``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

 `/* C Program to check for majority element in a sorted array */``# include ``# include ` `/* If x is present in arr[low...high] then returns the index of``first 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/2``times 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 of``first 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);``    ``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

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

 `'''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 ``=` `3``if` `(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#

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

## Javascript

 ``

Output:

`3 appears more than 3 times in arr[]`

Time Complexity: O(Logn)

Auxiliary Space: O(1)

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

 `#include ``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);``    ``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`

## C

 `#include ``#include `  `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);``    ``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;``}`

## Java

 `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 Code``public` `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`

## Python3

 `def` `isMajorityElement(arr,``                      ``n, key):` `   ``if` `(arr[n ``/``/` `2``] ``=``=` `key):``        ``return` `True``    ` `   ``return` `False` `# Driver code``if` `__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`

## C#

 `using` `System;``class` `GFG``{` `static` `bool` `isMajorityElement(``int` `[]arr, ``int` `n,``                                 ``int` `key)``{``    ``if` `(arr[n / 2] == key)``        ``return` `true``;``    ``else``        ``return` `false``;``}` `// Driver Code``public` `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`

## Javascript

 ``

Output

`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.

My Personal Notes arrow_drop_up