算法与数据结构(2):博耶-摩尔投票算法

博耶-摩尔投票算法(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;
}
c++·algorithm
102 views
Comments
登录后评论
Sign In