问题
从一个数组中找出出现次数超过一半的数。(这数一定存在)
策略: 不同的两数相消,最后剩下的一定是这个数。(最坏情况,其他各数联合与其相消,但是由于数量不够,剩下的还是这个数)。
leetcode相关题目
算法
1,初始化: vote=0; ans=anyone
2,从i遍历数组,遇到vote=0则ans=nums[i],vote++,否则如果ans==nums[i] vote++,不等则 vote–
3,返回ans即为答案。
class Solution {
public int majorityElement(int[] nums) {
int ans=nums[0];
int vote=0;
for(int i=0; i<nums.length; i++){
if(vote==0){
ans=nums[i];
vote+=1;
}else{
if(nums[i]==ans){
vote++;
}else{
vote--;
}
}
}
return ans;
}
}