Majority Element
Find the element that appears more than n/2 times using the Boyer-Moore voting algorithm in O(n) time and O(1) space.
Sample input
[2, 2, 1, 1, 1, 2, 2]
Sample output
2
Solution
def majority_element(nums):
count = 0
candidate = None
for num in nums:
if count == 0:
candidate = num
count += 1 if num == candidate else -1
return candidate
print(majority_element([2, 2, 1, 1, 1, 2, 2]))
function majorityElement(nums) {
let count = 0, candidate = null;
for (const num of nums) {
if (count === 0) candidate = num;
count += num === candidate ? 1 : -1;
}
return candidate;
}
console.log(majorityElement([2, 2, 1, 1, 1, 2, 2]));
public class Main {
static int majorityElement(int[] nums) {
int count = 0, candidate = 0;
for (int num : nums) {
if (count == 0) candidate = num;
count += (num == candidate) ? 1 : -1;
}
return candidate;
}
public static void main(String[] args) {
System.out.println(majorityElement(new int[]{2, 2, 1, 1, 1, 2, 2}));
}
}
fun majorityElement(nums: IntArray): Int {
var count = 0
var candidate = 0
for (num in nums) {
if (count == 0) candidate = num
count += if (num == candidate) 1 else -1
}
return candidate
}
fun main() {
println(majorityElement(intArrayOf(2, 2, 1, 1, 1, 2, 2)))
}
func majorityElement(_ nums: [Int]) -> Int {
var count = 0
var candidate = 0
for num in nums {
if count == 0 { candidate = num }
count += (num == candidate) ? 1 : -1
}
return candidate
}
print(majorityElement([2, 2, 1, 1, 1, 2, 2]))
int majorityElement(List<int> nums) {
int count = 0, candidate = 0;
for (final num in nums) {
if (count == 0) candidate = num;
count += (num == candidate) ? 1 : -1;
}
return candidate;
}
void main() {
print(majorityElement([2, 2, 1, 1, 1, 2, 2]));
}
#include <iostream>
#include <vector>
using namespace std;
int majorityElement(const vector<int>& nums) {
int count = 0, candidate = 0;
for (int num : nums) {
if (count == 0) candidate = num;
count += (num == candidate) ? 1 : -1;
}
return candidate;
}
int main() {
cout << majorityElement({2, 2, 1, 1, 1, 2, 2}) << endl;
return 0;
}
#include <stdio.h>
int majorityElement(int *nums, int n) {
int count = 0, candidate = 0;
for (int i = 0; i < n; i++) {
if (count == 0) candidate = nums[i];
count += (nums[i] == candidate) ? 1 : -1;
}
return candidate;
}
int main() {
int nums[] = {2, 2, 1, 1, 1, 2, 2};
printf("%d\n", majorityElement(nums, 7));
return 0;
}