Boyer-Moore 投票算法

算法概述

Boyer-Moore 投票算法用于高效寻找数组中出现次数超过半数的元素(多数元素)。其核心思想通过抵消策略将时间复杂度优化至 O(n),空间复杂度为 O(1)。

核心原理

抵消策略 :不同元素相互抵消,最终剩余元素即为候选多数元素。
两阶段流程

  1. 候选阶段 :遍历数组,维护候选元素 candidate 和计数器 count。遇到相同元素时 count++,否则 count--;当 count=0 时更新候选元素。
  2. 验证阶段 :统计候选元素的实际出现次数,确认是否满足 > ⌊n/2⌋

代码实现

Java 示例
java 复制代码
public int majorityElement(int[] nums) {
    int candidate = 0, count = 0;
    for (int num : nums) {
        if (count == 0) candidate = num;
        count += (num == candidate) ? 1 : -1;
    }
    return candidate; // 假设多数元素存在
}

正确性证明

  • 数学基础 :多数元素出现次数 > n/2,抵消过程中其剩余数量始终占优。
  • 示例分析 :数组 [2,2,1,1,1,2,2] 的抵消过程:
    • 初始 candidate=2count=1
    • 遍历至第三个 1count=0,切换 candidate=1
    • 最终 candidate=2 为正确结果。

复杂度与优缺点

  • 时间复杂度:O(n),仅需一次或两次遍历。
  • 空间复杂度:O(1),仅需常数空间存储变量。
  • 优点:高效、简单,适用于数据流场景。
  • 缺点:仅适用于严格多数的情况,需验证阶段确保正确性。

应用场景

  • 选举系统:快速确定得票过半的候选人。
  • 数据分析:识别主要趋势或高频元素。
  • 分布式系统:多数共识算法的底层实现。
相关推荐
To_OC6 小时前
LC 51 N 皇后:我以为难的是回溯,结果栽在了对角线下标
javascript·算法·leetcode
腻害兔6 小时前
【若依项目-产品经理视角】深度拆解 RuoYi-Vue-Pro 商城模块:从商品管理到交易引擎,50 张表撑起一整套电商系统
java·大数据·vue.js·产品经理·ai编程
2401_841495647 小时前
【操作系统】进程同步与互斥实验报告
c++·算法·操作系统·进程·并发·同步·互斥
码智社7 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
克里斯蒂亚诺更新7 小时前
ruoyi角色权限的对应关系
笔记
萧瑟余晖8 小时前
JDK 26 新特性详解
java·开发语言
马优晨9 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
a11177610 小时前
2FA 验证码生成器(github登录验证 app)
笔记·学习
我的xiaodoujiao10 小时前
API 接口自动化测试详细图文教程学习系列32--Allure测试报告2
python·学习·测试工具·pytest