Boyer-Moore majority vote algorithm (摩尔投票算法)
典型案例:
(1) 找出大于n/2的元素,leetcode: https://leetcode.com/problems/majority-element/
classSolution {public int majorityElement(int[] nums) {int count = 0;int cur = 0;for(int i = 0; i < nums.length; ++i){if(count == 0){
cur=nums[i];
count++;
}else{if(nums[i] ==cur){
count++;
}else{
count--;
}
}
}returncur;
}
}
(2) 找出大于n/3的元素, letcode: https://leetcode.com/problems/majority-element-ii/
/*思路:摩尔投票升级版,超过n/3的数最多只能有两个;
先选出两个候选人A,B,遍历数组,如果投A(等于A),则A的票数++;如果投B,B的票数++;
如果A,B都不投(即与A,B都不相等),那么检查此时是否AB中候选人的票数是否为0,如果为0,则成为新的候选人;
如果A,B两个人的票数都不为0,那么A,B两个候选人的票数均--;