摩尔多数投票算法(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是数组中的多数元素

你可能感兴趣的:(算法)