摩尔多数投票算法(Moore's Voting Algorithm)

应用场景:在数组中找出多数元素----->多数票投给了谁?

摩尔投票算法仅针对与数组中已知有多数元素存在

多数元素:多数元素的数量大于总数组数的1/2

时间复杂度:O(n)

*算法步骤:(两步)

1. 指定第一个元素为多数元素,依次判断后面的元素是否与指定多数元素相同,若相同count+=1,不同则count-=1.当count=0时,将当前元素设为多数元素,count变为1,继续依次往后直到最后一个元素,此时的多数元素是谁,谁就是我们要的多数元素。

2. 验证我们第一步得到的多数元素是不是真的是数组中的多数元素

*举例:

a=[2,2,3,5,2,2,6]

  • 初始化: maj_index=0, count =1---->a[maj_index]=2
  • 下一个元素是2,与a[maj_index]相同,count+1=2
  • 下一个元素是3,与a[maj_index]不同,count-1=1
  • 下一个元素是5,与a[maj_index]不同,count-1=0,maj_index=3, count=1,a[maj_index]=5
  • 下一个元素是2,与a[maj_index]不同,count-1=0,maj_index=4,count=1,a[maj_index]=2
  • 下一个元素是2,与a[maj_index]相同,count+1=2
  • 下一个元素是6,与a[maj_index]不同,count-1=1------> a[maj_index]=2 所以我们的多数元素是2

 

  • 将多数元素带入到第二部判断该元素是否真的是多数元素
  • maj=2, 如果数组中有元素与maj相同,count+=1,将数组遍历一遍
  • 如果count>len(list)/2---->maj=2是数组中的多数元素
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值