Find the majority element using bit logic
The problem at hand is to find the majority element in a given array. A majority element is an element that appears more than n/2 times in an array of n elements, where n is the size of the array.
Example
Let's consider an example to understand the problem better. Suppose we have an array arr[] = {1, 7, 3, 7, 4, 3, 7, 7, 51, 7, 7}. In this array, the number 7 appears 6 times out of the total 11 elements, which is more than n/2 (11/2 = 5). Hence, the majority element in this array is 7.
Pseudocode
Before diving into the algorithm, let's summarize the approach in pseudocode:
findMajorityElement(arr[], n):
bits = 32
count = 0
x = 0
for i in range(0, bits):
for j in range(0, n):
if (arr[j] & (1 << i)) != 0:
count++
if count > (n / 2):
x += (1 << i)
count = 0
count = 0
for i in range(0, n):
if arr[i] == x:
count++
if count > n / 2:
print("Majority element is", x)
else:
print("No Majority element in this array")
Algorithm Explanation
- The function
findMajorityElement
takes the arrayarr[]
and its sizen
as input. - We use a variable
bits
to denote the number of bits in an integer (typically 32 for most systems). - We initialize a variable
count
to keep track of the number of active bits at a specific position (ith position) across all array elements. - We use a variable
x
to find the candidate majority element by setting the bits at positions where the count of set bits is greater than n/2. - We loop through each bit position (from 0 to
bits-1
) and count the number of set bits (1) at that position across all elements of the array. - If the count of set bits at the current position is greater than n/2, we set the corresponding bit of
x
. - After obtaining
x
, we count its frequency in the array to verify if it indeed appears more than n/2 times. - If
x
satisfies the majority condition, we print it as the majority element; otherwise, we print that there is no majority element.
Code Solution
Here given code implementation process.
// C Program for
// Find the majority element using bit logic
#include <stdio.h>
void findMajorityElement(int arr[], int n)
{
// Auxiliary variable
int bits = 32;
int count = 0;
int x = 0;
// This loop are work on range (1...31) bit number
for (int i = 0; i < bits; ++i)
{
// Count active bits in ith position in every array element
for (int j = 0; j < n; ++j)
{
if ((arr[j] & (1 << i)) != 0)
{
count++;
}
}
if (count > (n / 2))
{
// Add value of i-th bit
x += (1 << i);
}
count = 0;
}
// Count frequency of x element
for (int i = 0; i < n; ++i)
{
if (arr[i] == x)
{
count++;
}
}
if (count > n / 2)
{
// x appears more than n/2 times in the given array
printf("\n Majority element is %d", x);
}
else
{
printf("\n No Majority element in this array ");
}
}
int main()
{
int arr[] = {
1 , 7 , 3 , 7 , 4 , 3 , 7 , 7 , 51 , 7 , 7
};
// Get the length of array
int n = sizeof(arr) / sizeof(arr[0]);
// Test
findMajorityElement(arr, n);
return 0;
}
Output
Majority element is 7
// Java program for
// Find the majority element using bit logic
public class Searching
{
public void findMajorityElement(int[] arr, int n)
{
// Auxiliary variable
int bits = 32;
int count = 0;
int x = 0;
// This loop are work on range (1...31) bit number
for (int i = 0; i < bits; ++i)
{
// Count active bits in ith position in every array element
for (int j = 0; j < n; ++j)
{
if ((arr[j] & (1 << i)) != 0)
{
count++;
}
}
if (count > (n / 2))
{
// Add value of i-th bit
x += (1 << i);
}
count = 0;
}
// Count frequency of x element
for (int i = 0; i < n; ++i)
{
if (arr[i] == x)
{
count++;
}
}
if (count > n / 2)
{
// x appears more than n/2 times in the given array
System.out.print("\n Majority element is " + x);
}
else
{
System.out.print("\n No Majority element in this array ");
}
}
public static void main(String[] args)
{
Searching task = new Searching();
int[] arr = {
1 , 7 , 3 , 7 , 4 , 3 , 7 , 7 , 51 , 7 , 7
};
// Get the length of array
int n = arr.length;
// Test
task.findMajorityElement(arr, n);
}
}
Output
Majority element is 7
// Include header file
#include <iostream>
using namespace std;
// C++ program for
// Find the majority element using bit logic
class Searching
{
public: void findMajorityElement(int arr[], int n)
{
// Auxiliary variable
int bits = 32;
int count = 0;
int x = 0;
// This loop are work on range (1...31) bit number
for (int i = 0; i < bits; ++i)
{
// Count active bits in ith position in every array element
for (int j = 0; j < n; ++j)
{
if ((arr[j] &(1 << i)) != 0)
{
count++;
}
}
if (count > (n / 2))
{
// Add value of i-th bit
x += (1 << i);
}
count = 0;
}
// Count frequency of x element
for (int i = 0; i < n; ++i)
{
if (arr[i] == x)
{
count++;
}
}
if (count > n / 2)
{
// x appears more than n/2 times in the given array
cout << "\n Majority element is " << x;
}
else
{
cout << "\n No Majority element in this array ";
}
}
};
int main()
{
Searching *task = new Searching();
int arr[] = {
1 , 7 , 3 , 7 , 4 , 3 , 7 , 7 , 51 , 7 , 7
};
// Get the length of array
int n = sizeof(arr) / sizeof(arr[0]);
// Test
task->findMajorityElement(arr, n);
return 0;
}
Output
Majority element is 7
// Include namespace system
using System;
// Csharp program for
// Find the majority element using bit logic
public class Searching
{
public void findMajorityElement(int[] arr, int n)
{
// Auxiliary variable
int bits = 32;
int count = 0;
int x = 0;
// This loop are work on range (1...31) bit number
for (int i = 0; i < bits; ++i)
{
// Count active bits in ith position in every array element
for (int j = 0; j < n; ++j)
{
if ((arr[j] & (1 << i)) != 0)
{
count++;
}
}
if (count > (n / 2))
{
// Add value of i-th bit
x += (1 << i);
}
count = 0;
}
// Count frequency of x element
for (int i = 0; i < n; ++i)
{
if (arr[i] == x)
{
count++;
}
}
if (count > n / 2)
{
// x appears more than n/2 times in the given array
Console.Write("\n Majority element is " + x);
}
else
{
Console.Write("\n No Majority element in this array ");
}
}
public static void Main(String[] args)
{
Searching task = new Searching();
int[] arr = {
1 , 7 , 3 , 7 , 4 , 3 , 7 , 7 , 51 , 7 , 7
};
// Get the length of array
int n = arr.Length;
// Test
task.findMajorityElement(arr, n);
}
}
Output
Majority element is 7
package main
import "fmt"
// Go program for
// Find the majority element using bit logic
type Searching struct {}
func getSearching() * Searching {
var me *Searching = &Searching {}
return me
}
func(this Searching) findMajorityElement(arr[] int, n int) {
// Auxiliary variable
var bits int = 32
var count int = 0
var x int = 0
// This loop are work on range (1...31) bit number
for i := 0 ; i < bits ; i++ {
// Count active bits in ith position in every array element
for j := 0 ; j < n ; j++ {
if (arr[j] & (1 << i)) != 0 {
count++
}
}
if count > (n / 2) {
// Add value of i-th bit
x += (1 << i)
}
count = 0
}
// Count frequency of x element
for i := 0 ; i < n ; i++ {
if arr[i] == x {
count++
}
}
if count > n / 2 {
// x appears more than n/2 times in the given array
fmt.Print("\n Majority element is ", x)
} else {
fmt.Print("\n No Majority element in this array ")
}
}
func main() {
var task * Searching = getSearching()
var arr = [] int {1 , 7 , 3 , 7 , 4 , 3 , 7 , 7 , 51 , 7 , 7}
// Get the length of array
var n int = len(arr)
// Test
task.findMajorityElement(arr, n)
}
Output
Majority element is 7
<?php
// Php program for
// Find the majority element using bit logic
class Searching
{
public function findMajorityElement($arr, $n)
{
// Auxiliary variable
$bits = 32;
$count = 0;
$x = 0;
// This loop are work on range (1...31) bit number
for ($i = 0; $i < $bits; ++$i)
{
// Count active bits in ith position in every array element
for ($j = 0; $j < $n; ++$j)
{
if (($arr[$j] & (1 << $i)) != 0)
{
$count++;
}
}
if ($count > ((int)($n / 2)))
{
// Add value of i-th bit
$x += (1 << $i);
}
$count = 0;
}
// Count frequency of x element
for ($i = 0; $i < $n; ++$i)
{
if ($arr[$i] == $x)
{
$count++;
}
}
if ($count > (int)($n / 2))
{
// x appears more than n/2 times in the given array
echo("\n Majority element is ".$x);
}
else
{
echo("\n No Majority element in this array ");
}
}
}
function main()
{
$task = new Searching();
$arr = array(1, 7, 3, 7, 4, 3, 7, 7, 51, 7, 7);
// Get the length of array
$n = count($arr);
// Test
$task->findMajorityElement($arr, $n);
}
main();
Output
Majority element is 7
// Node JS program for
// Find the majority element using bit logic
class Searching
{
findMajorityElement(arr, n)
{
// Auxiliary variable
var bits = 32;
var count = 0;
var x = 0;
// This loop are work on range (1...31) bit number
for (var i = 0; i < bits; ++i)
{
// Count active bits in ith position in every array element
for (var j = 0; j < n; ++j)
{
if ((arr[j] & (1 << i)) != 0)
{
count++;
}
}
if (count > (parseInt(n / 2)))
{
// Add value of i-th bit
x += (1 << i);
}
count = 0;
}
// Count frequency of x element
for (var i = 0; i < n; ++i)
{
if (arr[i] == x)
{
count++;
}
}
if (count > parseInt(n / 2))
{
// x appears more than n/2 times in the given array
process.stdout.write("\n Majority element is " + x);
}
else
{
process.stdout.write("\n No Majority element in this array ");
}
}
}
function main()
{
var task = new Searching();
var arr = [1, 7, 3, 7, 4, 3, 7, 7, 51, 7, 7];
// Get the length of array
var n = arr.length;
// Test
task.findMajorityElement(arr, n);
}
main();
Output
Majority element is 7
# Python 3 program for
# Find the majority element using bit logic
class Searching :
def findMajorityElement(self, arr, n) :
# Auxiliary variable
bits = 32
count = 0
x = 0
i = 0
# This loop are work on range (1...31) bit number
while (i < bits) :
j = 0
# Count active bits in ith position in every list element
while (j < n) :
if ((arr[j] & (1 << i)) != 0) :
count += 1
j += 1
if (count > (int(n / 2))) :
# Add value of i-th bit
x += (1 << i)
count = 0
i += 1
i = 0
# Count frequency of x element
while (i < n) :
if (arr[i] == x) :
count += 1
i += 1
if (count > int(n / 2)) :
# x appears more than n/2 times in the given list
print("\n Majority element is ", x, end = "")
else :
print("\n No Majority element in this array ", end = "")
def main() :
task = Searching()
arr = [1, 7, 3, 7, 4, 3, 7, 7, 51, 7, 7]
# Get the length of list
n = len(arr)
# Test
task.findMajorityElement(arr, n)
if __name__ == "__main__": main()
Output
Majority element is 7
# Ruby program for
# Find the majority element using bit logic
class Searching
def findMajorityElement(arr, n)
# Auxiliary variable
bits = 32
count = 0
x = 0
i = 0
# This loop are work on range (1...31) bit number
while (i < bits)
j = 0
# Count active bits in ith position in every array element
while (j < n)
if ((arr[j] & (1 << i)) != 0)
count += 1
end
j += 1
end
if (count > (n / 2))
# Add value of i-th bit
x += (1 << i)
end
count = 0
i += 1
end
i = 0
# Count frequency of x element
while (i < n)
if (arr[i] == x)
count += 1
end
i += 1
end
if (count > n / 2)
# x appears more than n/2 times in the given array
print("\n Majority element is ", x)
else
print("\n No Majority element in this array ")
end
end
end
def main()
task = Searching.new()
arr = [1, 7, 3, 7, 4, 3, 7, 7, 51, 7, 7]
# Get the length of array
n = arr.length
# Test
task.findMajorityElement(arr, n)
end
main()
Output
Majority element is 7
// Scala program for
// Find the majority element using bit logic
class Searching()
{
def findMajorityElement(arr: Array[Int], n: Int): Unit = {
// Auxiliary variable
var bits: Int = 32;
var count: Int = 0;
var x: Int = 0;
var i: Int = 0;
// This loop are work on range (1...31) bit number
while (i < bits)
{
var j: Int = 0;
// Count active bits in ith position in every array element
while (j < n)
{
if ((arr(j) & (1 << i)) != 0)
{
count += 1;
}
j += 1;
}
if (count > (n / 2))
{
// Add value of i-th bit
x += (1 << i);
}
count = 0;
i += 1;
}
i = 0;
// Count frequency of x element
while (i < n)
{
if (arr(i) == x)
{
count += 1;
}
i += 1;
}
if (count > n / 2)
{
// x appears more than n/2 times in the given array
print("\n Majority element is " + x);
}
else
{
print("\n No Majority element in this array ");
}
}
}
object Main
{
def main(args: Array[String]): Unit = {
var task: Searching = new Searching();
var arr: Array[Int] = Array(1, 7, 3, 7, 4, 3, 7, 7, 51, 7, 7);
// Get the length of array
var n: Int = arr.length;
// Test
task.findMajorityElement(arr, n);
}
}
Output
Majority element is 7
import Foundation;
// Swift 4 program for
// Find the majority element using bit logic
class Searching
{
func findMajorityElement(_ arr: [Int], _ n: Int)
{
// Auxiliary variable
let bits: Int = 32;
var count: Int = 0;
var x: Int = 0;
var i: Int = 0;
// This loop are work on range (1...31) bit number
while (i < bits)
{
var j: Int = 0;
// Count active bits in ith position in every array element
while (j < n)
{
if ((arr[j] & (1 << i)) != 0)
{
count += 1;
}
j += 1;
}
if (count > (n / 2))
{
// Add value of i-th bit
x += (1 << i);
}
count = 0;
i += 1;
}
i = 0;
// Count frequency of x element
while (i < n)
{
if (arr[i] == x)
{
count += 1;
}
i += 1;
}
if (count > n / 2)
{
// x appears more than n/2 times in the given array
print("\n Majority element is ",
x, terminator: "");
}
else
{
print("\n No Majority element in this array ",
terminator: "");
}
}
}
func main()
{
let task: Searching = Searching();
let arr: [Int] = [1, 7, 3, 7, 4, 3, 7, 7, 51, 7, 7];
// Get the length of array
let n: Int = arr.count;
// Test
task.findMajorityElement(arr, n);
}
main();
Output
Majority element is 7
// Kotlin program for
// Find the majority element using bit logic
class Searching
{
fun findMajorityElement(arr: Array < Int > , n: Int): Unit
{
// Auxiliary variable
val bits: Int = 32;
var count: Int = 0;
var x: Int = 0;
var i: Int = 0;
// This loop are work on range (1...31) bit number
while (i < bits)
{
var j: Int = 0;
// Count active bits in ith position in every array element
while (j < n)
{
if ((arr[j] and(1 shl i)) != 0)
{
count += 1;
}
j += 1;
}
if (count > (n / 2))
{
// Add value of i-th bit
x += (1 shl i);
}
count = 0;
i += 1;
}
i = 0;
// Count frequency of x element
while (i < n)
{
if (arr[i] == x)
{
count += 1;
}
i += 1;
}
if (count > n / 2)
{
// x appears more than n/2 times in the given array
print("\n Majority element is " + x);
}
else
{
print("\n No Majority element in this array ");
}
}
}
fun main(args: Array < String > ): Unit
{
val task: Searching = Searching();
val arr: Array < Int > = arrayOf(1, 7, 3, 7, 4, 3, 7, 7, 51, 7, 7);
// Get the length of array
val n: Int = arr.count();
// Test
task.findMajorityElement(arr, n);
}
Output
Majority element is 7
Explanation of Result
After running the given code with the provided example array, the output is "Majority element is 7", which matches our expectations.
Time Complexity
Let's analyze the time complexity of the algorithm. The outer loop runs bits
times, which is a constant
value (32 in this case). The inner loop runs n
times. Hence, the time complexity of the algorithm is
O(bits * n), which is equivalent to O(n). In most practical cases, bits is a small constant, making the algorithm
linear in the size of the input array.
Please share your knowledge to improve code and content standard. Also submit your doubts, and test case. We improve by your feedback. We will try to resolve your query as soon as possible.
New Comment