Boyer_Moore算法(多数投票算法)

Boyer-Moore算法是一种用于找出数组中出现次数超过一半的元素的高效方法。通过计数器操作,遇到多数元素时计数器加1,遇到其他元素时计数器减1,确保最终多数元素的计数为正。当计数器为0时,将当前元素作为可能的多数元素。即使误判,由于多数元素的存在,经过多次迭代,真实多数元素依然能占据优势。例如,在[7, 7, 5, 7, 5, 1, 5, 7, 5, 5, 7, 7, 7, 7]数组中,算法能正确找到7为多数元素。" 46490755,4939933,使用jQuery mousewheel插件获取滚轮滚动次数,"['jQuery', '前端开发', 'JavaScript', 'DOM操作']
摘要由CSDN通过智能技术生成

该算法的原理非常的巧妙,主要是利用主要元素要在数组中超过半数,所以就可以这样操作:

设置一个计数器,每次遇见主要元素加1,遇见其他任何的元素就减1,可想而知,因为多数元素是主要元素,最后肯定会是一个正数,那么利用这个就可以找出那个主要元素。那么问题就是如何让主要元素等于1,其他的元素等于-1.

举例说明:

[7, 7, 5, 7, 5, 1 | 5, 7 | 5, 5, 7, 7 | 7, 7, 7, 7]以此数组为例子来说明该方法如何的巧妙的完成上述的难题额,我们可以换个角度来思考这个问题,既然让主要元素是1并且最终会胜利,那么我们设置一个count计数器,让每次count为0时候遇见的元素,假设为主要元素,那么每次遇见该元素就加1,其他元素就减1。那么显然会出现两种情况:

情况一:

该元素是主要的元素,那么顺理成章完成任务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值