首页 > 编程语言 >投票算法 Boyer-Moore

投票算法 Boyer-Moore

时间:2024-09-25 14:46:47浏览次数:1  
标签:候选者 遍历 Moore candidate 元素 计数器 算法 Boyer

投票算法 Boyer-Moore

算法描述

Boyer-Moore 投票算法是一种用来在线性时间内找到数组中出现次数超过一半(即多数元素)的算法。这个算法非常高效,因为它只需要一次遍历数组,并且使用常数级别的额外空间。

leetcode169题: 多数元素

算法思路

维护一个候选元素和一个计数器来实现投票算法:

  1. 初始化一个候选者 candidate 和一个计数器 count
  2. 遍历整个数组:
    1. 如果 count 为 0,那么将当前元素设为 候选者,并设置该候选者的计数器 count 为 1。
    2. 如果当前正在遍历的元素就是此时的候选者,那么该候选器的计数器count+1。
    3. 如果当前遍历的元素并不是此时的候选者, 那么减少该候选器的计数器值-1。
  3. 当遍历完成时,候选器candidate就是我们要找的多数元素。

算法实现

public int majorityElement(int[] nums) {
    int candidate = 0x00;   // 候选者
    int counter = 0;    // 候选者的支持度(计数器)

    for (int e: nums) {
        if (counter == 0) {
            // 如果当前计数器为0,设置当前正在遍历的元素为候选者
            candidate = e;
            // 设置当前元素的支持度为1
            counter = 1;
        } else if (e == candidate) {
            // 当前元素就是该候选者,计数器+1
            counter++;
        } else {
            // 当前元素不是该候选者,计数器-1
            counter-- ;
        }
    }

    return candidate;
}

复杂度分析

时间复杂度

  • O(n):Boyer-Moore 投票算法只需要遍历整个数组一次。在最坏的情况下,无论数组长度 n 有多长,都需要检查每个元素一次。因此,时间复杂度是线性的 O(n)。

空间复杂度

  • O(1):该算法使用了固定数量的额外空间来存储候选者 candidate 和计数器 count,而这些变量的数量并不随输入数据规模 n 的增长而变化。因此,空间复杂度是常数级别的 O(1)。

标签:候选者,遍历,Moore,candidate,元素,计数器,算法,Boyer
From: https://www.cnblogs.com/lilyflower/p/18431333

相关文章

  • 时序预测 | Matlab实现SSA-TCN麻雀搜索算法优化时间卷积网络时序预测-递归预测未来数
    时序预测|Matlab实现SSA-TCN麻雀搜索算法优化时间卷积网络时序预测-递归预测未来数据(单输入单输出)目录时序预测|Matlab实现SSA-TCN麻雀搜索算法优化时间卷积网络时序预测-递归预测未来数据(单输入单输出)预测效果基本介绍程序设计参考资料预测效果基本介绍1.Matlab实现SSA-TCN......
  • 算法备案主体审核被驳回?如何保证材料真实性?
    近日,很多朋友在算法备案申请流程主体审核环节遇到了「材料真实性存疑」的问题,具体驳回理由为:“《落实算法安全主体责任基本情况》真实性存疑,需根据企业真实情况描述制度建设内容”,本文将对此情况进行讲解。很多企业在主体信息审核意见的反馈是,「提交材料还需修改完善」,即信息......
  • 算法题之图论 [NOIP2001 提高组] Car的旅行路线详细题解
    P1027[NOIP2001提高组]Car的旅行路线这道题的思路呢,就是建个图,然后跑一遍Floyd,比较最小值就可以解决了。but!它每个城市只给三个点(共四个),所以还得计算出第四个点坐标。这里根据矩形的中点公式来表示未知点的坐标:(这个思路源于大佬 _jimmywang_       ......
  • 基于异步通讯事件触发的二阶离散系统同步算法设计
    精确计时在时间敏感的工业物联网(IIoT)中起着关键作用。然而,精确的时间同步需要更频繁的数据包交换,这会消耗更多的通信带宽和能量。这在电池供电的无线节点中是一个特别的挑战,低通信成本已成为时钟同步的重要因素。为了应对分布式无线传感器网络中实现低通信成本时钟同步的挑......
  • 工装识别算法 工服穿戴检测系统 CNN
    工装识别算法工服穿戴检测系统特点包括:工装识别算法工服穿戴检测系统利用图像识别技术,系统可以准确地识别工人是否穿戴了正确的工装,包括工作服、安全帽等。一旦检测到未穿戴的情况,系统将立即发出警报,并提示相关人员进行整改。工装识别算法工服穿戴检测系统对于电力作业场景,系统......
  • 算法优化+新增代码仓库支持,CodeGeeX的@repo功能效果提升
    CodeGeeX在升级到第三代模型时,就引入了RAG检索增强生成的能力。即模型会根据检索到的相关背景知识生成回答,大幅减轻生成内容的幻觉性。在CodeGeeX插件中,是通过侧边栏对话框中输入“@repo”触发RAG技术。用户可以对开源代码仓库进行提问,更准确地获得指定开源代码库相关的内容......
  • 向量数据库常见算法 | 七十九、向量数据库与索引算法
    索引算法则是向量数据库中的核心技术之一,它决定了数据库的检索效率和性能。本文将探讨向量数据库与索引算法的完美结合,以及它们在实际应用中的优势。1.向量数据库的优势高效检索:向量数据库采用高效的索引算法,如倒排索引、KD树、LSH等,可以快速地检索和查询向量数据。高维度支持:向量......
  • 文心一言 VS 讯飞星火 VS chatgpt (349)-- 算法导论23.2 8题
    八、Borden教授提出了一个新的分治算法来计算最小生成树。该算法的原理如下:给定图,将划分为两个集合和,使得和的差最多为1。设为端点全部在中的边的集合,为端点全部在中的边的集合。我们递归地解决两个子图和的最小生成树问题。最后,在边集合中选择横跨切割和的最小权重的边来将求出的......
  • 决策树算法在机器学习中的应用
    决策树算法在机器学习中的应用决策树(DecisionTree)算法是一种基本的分类与回归方法,它通过树状结构对数据进行建模,以解决分类和回归问题。决策树算法在机器学习中具有广泛的应用,其直观性、易于理解和实现的特点使其成为数据挖掘和数据分析中的常用工具。本文将详细探讨决策......
  • 大模型算法岗常见面试题100道(值得收藏)
    大模型应该是目前当之无愧的最有影响力的AI技术,它正在革新各个行业,包括自然语言处理、机器翻译、内容创作和客户服务等等,正在成为未来商业环境的重要组成部分。截至目前大模型已经超过200个,在大模型纵横的时代,不仅大模型技术越来越卷,就连大模型相关的岗位和面试也开始越来......