题目:给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。
方法一、HashMap词频统计:
通过HashMap可以确定数组内各个元素出现的个数。
class Solution {
public int majorityElement(int[] num) {
Map<Integer,Integer> map = new HashMap<>();
for (Integer i: num) {
Integer n=map.get(i); //获得key值
map.put(i, n==null ? 1:n+1);//更改value 和 key值
}
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
if(entry.getValue()>(num.length/2))return entry.getKey(); //entry.getKey()获得key值。
}
return 0;
}
}
方法二、投票法:
在刚开始时每读到一个相同的数时,将count++,之后如果遇到不同的将count–,当count等于0时,如果再遇到一个与res不相同的数,则更新res。
class Solution {
public int majorityElement(int[] nums) {
int res=0,cnt=0;
for(int num:nums){
if(cnt==0){
res=num;
cnt++;
}else{
if(res==num){
cnt++;
}else{
cnt--;
}
}
}
return res;
}
}