链接:https://leetcode-cn.com/problems/majority-element
给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在众数。
示例 1:
输入: [3,2,3]
输出: 3
示例 2:
输入: [2,2,1,1,1,2,2]
输出: 2
//使用HashMap实现,挺慢的...= =
class Solution {
public int majorityElement(int[] nums) {
Map<Integer,Integer>map=new HashMap<>();
for(int i=0;i<nums.length;i++){
if(!map.containsKey(nums[i])){
map.put(nums[i],1);
}
else{
int tmp=map.get(nums[i]);
map.put(nums[i],tmp+1);
}
if(map.get(nums[i])>nums.length/2-1)
return nums[i];
}
throw new IllegalArgumentException("No Solution.");
}
}
//Boyer-Moore投票算法,
//思路是依次遍历元素,不一样相互抵消,最后剩下那个元素就是大于数组长度一半的元素
class Solution {
public int majorityElement(int[] nums) {
int count=0;
int val=Integer.MIN_VALUE;
for(int n:nums){
if(count==0)
val=n;
if(val==n)count++;
else
count--;
}
return val;
}
}