Boyer-Moore 投票算法

简介: 这里先贴题目:

这里先贴题目ba49e6a3c9d84b8ebfbb8d28cca84d97.png

Boyer-Moore 投票算法:

通俗点来讲,就是占领据点,像攻城那样,对消。


当你的据点有人时对消,无人时就占领。


这道题使用该算法可实现时间复杂度为O(n),空间复杂度为O(1),接下来看代码:

int majorityElement(int* nums, int numsSize) {
    int amzing = nums[0];
    int count = 0;
    for (int i = 0; i < numsSize; i++)
    {
        if (amzing == nums[i])
            count++;
        else if (count == 0)
        {
            amzing = nums[i];
            count++;
        }
        else
            count--;
    }
    return amzing;
}

我们定义一个amzing先记录数组第一个数字,并且数量为0,然后遍历整个数组,当count不为0时,数字不同时相消,数字相同时增加,当count为0时,amzing换其他数字,再增加数量。


通俗点讲:定义一个士兵,数量为0,遍历所有人,当count不为0,如果数字不同,就是遇到敌人,同归于尽,数字相同,遇到友军就加入。当count等于0,据点无人,哪个数字也可以占领。但是有一个阵营的人数占了大半,无论怎么对拼相消,剩下的一定是那个阵营的,也就是那个大半的数字。


排序:

int cmp(void* p1,void* p2)
{
    return *(int*)p1 - *(int*)p2;
}
int majorityElement(int* nums, int numsSize){
    qsort(nums,numsSize,4,cmp);
    return nums[numsSize/2];
}
目录
相关文章
|
8月前
|
算法 搜索推荐 程序员
第六十四练 字符串匹配 - Boyer-Moore算法
第六十四练 字符串匹配 - Boyer-Moore算法
60 0
|
算法 搜索推荐 安全
Boyer-Moore 字符串匹配算法
Boyer-Moore 字符串匹配算法
237 1
Boyer-Moore 字符串匹配算法
|
算法
基于投票的热门计数算法策略
类似基于投票的热门计数算法普遍应用在热门文章,热门评论等场景中, 典型的比如网易和今日头条的评论区,国外比如Hacker News和Reddit的主题排序。
3644 0
|
算法 Java Linux
字符串查找算法总结(暴力匹配、KMP 算法、Boyer-Moore 算法和 Sunday 算法)
总结字符匹配的多种经典算法并给出Java实现。
3609 0
|
4天前
|
算法 数据安全/隐私保护
室内障碍物射线追踪算法matlab模拟仿真
### 简介 本项目展示了室内障碍物射线追踪算法在无线通信中的应用。通过Matlab 2022a实现,包含完整程序运行效果(无水印),支持增加发射点和室内墙壁设置。核心代码配有详细中文注释及操作视频。该算法基于几何光学原理,模拟信号在复杂室内环境中的传播路径与强度,涵盖场景建模、射线发射、传播及接收点场强计算等步骤,为无线网络规划提供重要依据。