摩尔投票
class Solution {
public List<Integer> majorityElement(int[] nums) {
List<Integer> ret = new ArrayList<>();
int num1=0,cnt1=0;
int num2=0,cnt2=0;
int len=nums.length;
for(int i=0;i<len;i++){
if(nums[i]==num1){
cnt1++;
}else if(nums[i]==num2){
cnt2++;
}else if(cnt1==0){
num1=nums[i];
cnt1=1;
}else if(cnt2==0){
num2=nums[i];
cnt2=1;
}else{
cnt1--;
cnt2--;
}
}
cnt1=0;
cnt2=0;
for(int j=0;j<len;j++){
if(nums[j]==num1){
cnt1++;
}else if(nums[j]==num2){
cnt2++;
}
}
if(cnt1>len/3) ret.add(num1);
if(cnt2>len/3) ret.add(num2);
return ret;
}
}
摩尔投票只能选出候选人,但是不是它的数目满足要求还要验证.如果数组保证存在一个这样的数,选出来的候选人一定有这个数.如果存在两个,两个候选人一定都对.