题目:给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。
我有两种解法:
1.直接将数组先进行排序,然后直接返回nums[length/2]的值,就是超过数组长度一半的元素。
if(nums==null||nums.length==0) return -1;
//该方法时间复杂度为O(n2)
Arrays.sort(nums);
return nums[nums.length/2];
2.摩尔投票法,维护一个遍历作为投票数count和一个返回值res(初始值为nums[0]),遍历到与自己相同的数count+1,与自己不同的进行count-1,当count==0时,将res置为当前值。最终返回res。
//方法2:摩尔投票法,相同的数就加1,不同的数就减1
int res=nums[0];
int count=1;//这里设置为1
for(int i=1;i<nums.length;i++){
if(nums[i]==res){
count++;
}else if(--count==0){
res=nums[i];
count=1;
}
}
return res;