目录
介绍
摩尔投票法用于找到一个数组中出现次数超多数组长度一半的元素。
- 初始化;
- 由于不同的票之间是相互对立的,当当前的被投票候选人与下一个被投票的候选人相同时,投票数++,不同时投票数--;
- 当投票数vote=0时,则将候选人更新为当前遍历到的这个候选人,如此重复;
- 由于要找到的候选人的被投票个数超过数组长度的一半,遍历完数组后,得到的候选人candidate就是要找的。
代码实现
public class Boyer {
public static void boyervote(int[] nums){
int candidate=-1;
int vote=0;
for (int num:nums) {
if(vote==0){
candidate=num;
}
if(candidate==num){
vote++;
}else{
vote--;
}
}
System.out.println(candidate);
}
public static void main(String[] args) {
int[] nums=new int[]{1,2,2,2,3};//结果为2
boyervote(nums);
}
}
练习的话可以去leetcode上搜索多数元素