解法一: 因为要求的输出数组中长度大于一半的数,那么证明 如果先将数组进行排序完后,中间的数一定是出现最多的,所以直接返回中间的数就行。
class Solution {
public int majorityElement(int[] nums) {
Arrays.sort(nums);
return nums[nums.length/2];
}
}
解法二:摩尔投票法
假设数组中每个不同的数字就代表一个国家,而数字的个数就代表这个国家的人数,他们在一起混战,就是每两个两个同归于尽。我们就可以知道那个人数大于数组长度一半的肯定会获胜。
就算退一万步来说,其他的所有人都来攻击这个人数最多的国家,他们每两个两个同归于尽,最终剩下的也是那个众数
class Solution {
public int majorityElement(int[] nums) {
int major=nums[0];
int count=1;
for(int i = 1;i<nums.length;i++){
if(count==0){
major=nums[i];
count++;
}else if(nums[i]==major){
count++;
}else{
count--;
}
}
return major;
}
}