博耶-摩尔投票算法(Boyer-Moore majority vote algorithm)是一种用来寻找一组元素中占多数元素的常数级空间复杂度算法。
算法的伪代码为:
初始化元素m并给计数器counter赋初值0
对于输入数组中的每个元素x:
若counter=0,则m=x and i = 1
若m=x, 则counter = counter + 1
否则counter = counter - 1
返回m
对应的C++实现为:
int majority_element(vector<int> &arr)
{
int m = 0, counter = 0;
for (int x : arr)
{
if (!counter)
{
m = x;
counter = 1;
}
else if (m == x)
counter++;
else
counter--;
}
return m;
}