LeetCode Problem 169 Description
Given an array of size n, find the majority element. The majority element is the element that appears more than ⌊ n/2 ⌋
times.
You may assume that the array is non-empty and the majority element always exist in the array.
Solution
This problem can be solved with the Boyer-Moore talgorithm. For instance, the following image will illustrate the algorithm.
We can see that if the major element is not the same as the current element, then the amount of the major element decreases 1. If the amount becomes zero and it meets another element, the major element will change to the current element and repeats the steps.
Here is the code:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Solution {
public:
int majorityElement(vector<int> & nums);
};
int Solution::majorityElement(vector<int> & nums) {
//Boyer-Moore algorithm
int major = nums[0], count = 1;
for (int i = 1; i < nums.size(); i++){
if (count == 0) {
major = nums[i];
count = 1;
}
else if (major == nums[i]) {
count++;
}
else {
count--;
}
}
return major;
}
As we can see, every time that the element of the vector is not equal to the current major element then the count of the current element decreases 1. If the current count become 0 and we meet another different element, we should change the major element. Repeat the steps and we can get the last element as the major element.