给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
法一:同归于尽法
因为分散在数组中的众数,它出现次数永远大于其他元素出现次数之和,于是我们可以用同归于尽法,最后计数为正的就是众数。具体是,先假设第一次出现的元素是众数,然后遇到下一个判断它是不是同个元素,是的话计数+1,不是-1。一直到遇到不同元素,然后计数减为负数为止,更换众数为当前元素(这说明此前假设的众数敌不过其他人的攻击败下阵来,如果它真是众数,那么还有兵力再和其他所有人交战到胜利,若不是最后就针对敌不过其他人的攻势了)。然后一直循环到数组末尾,最后计数为正的就是众数,因为这个元素在和其他元素交战中还有幸存者。
class Solution {
public int majorityElement(int[] nums) {
int majority=nums[0];
int count=1;
for(int i=1;i<nums.length;i++){
if(majority==nums[i]){
count++;
}else{
count--;
}
if(count<0){
majority=nums[i];
count=0;
}
}
return majority;
}
}