解题思路:
- 使用HashMap来存储每个元素以及出现的次数。从数组的第一个元素开始遍历,如果遍历到的这个数在map中没有相同的key值,说明这个数是第一次出现,就把该数当作key放入map,对应的value置为1;反之,如果遍历到的这个数已经存在于map,那就把该值在map中对应的value值+1。这样当遍历完数组之后,对应的map就是每个数及其出现的次数,且每个key都不重复。
- 按照题目的要求,找“多数元素”,那就是直接在map中找到value大于n/2对应的key值即可。因为HashMap常用方法中没有根据value找对应key的方法,所以我就简单手写了一个。
- 这个解法可能略显繁杂,还可优化,这么写主要是为了回顾并熟练下hashmap及其常用方法。
class Solution {
public int majorityElement(int[] nums) {
// 创建哈希表
Map counts = new HashMap<>();
int max = 0;
int res = nums[0];
for(int num : nums){
// 将数组元素存入集合中,元素不存在第一次存入1,存在后不重复存入,在存在的key的value + 1
counts.put(num,counts.getOrDefault(num,0) + 1);
}
// 遍历哈希表,选出最大的value对应的key
for(Map.Entry count : counts.entrySet()){
if(max < count.getValue()){
max = count.getValue();
res = count.getKey();
}
}
return res;
}
}



