Question: An element is a majority if it appears more than n/2 times. Give an algorithm that takes an array of n elements and finds the majority element in that array. The array is not sorted.
Input: 8, 16, 8, 4, 8, 8, 8, 42, 16, 15, 8, 23, 4, 8, 15, 8, 8.
Output: Majority Element = 8
The most basic method of solving this problem is to take two loops and maintain a count of each of the element. If the count reaches more than (n/2) for any element, break the loop and return.
void printMajorityElement(int arr[], int size)
{
int count = 0;
int i,j;
int majority = 0;
int found = 0;
for(i = 0;i<size;i++)
{
count = 0;
for(j = 0;j<size;j++)
{
if(arr[i] == arr[j])
count++;
}
if(count > (size/2))
{
found = 1;
majority = arr[i];
break;
}
}
if(found)
printf("Majority element = %d",majority);
else
printf("Majority element not present");
}
Time Complexity:- O(n2)
Space Complexity:- O(1)
Note: There can only be one majority element in an array.
Method 2:- Using sorting
Method 3:- Using a single scan
