题解 | #数组中出现次数超过一半的数字#
数组中出现次数超过一半的数字
https://www.nowcoder.com/practice/e8a1b01a2df14cb2b228b30ee6a92163
思路
构建一个哈希表,遍历数组,将遇到的数字存入哈希表中,哈希表中的键为数组中的值,值为该数组中值出现的次数,当遍历的同时判断该次数是否超过了数组大小的一半,如果超过了直接返回该元素,如果直到结束都没有找到,根据题意肯定是当数组中只有一个元素时才会出现这种情况,所以直接返回数组第一个元素。
代码
import java.util.HashMap;
import java.util.Map;
public class Solution {
public int MoreThanHalfNum_Solution(int [] array) {
// 创建一个哈希表
Map<Integer, Integer> result = new HashMap<>(array.length / 2);
// 遍历数组将遇到的元素加入哈希表中
for (int i = 0; i < array.length; i++) {
// 如果哈希表中有该数据,则将其值自增
if (result.containsKey(array[i])) {
// 判断当前数据出现次数是否超过数组一半长度
if (result.get(array[i]) + 1 > array.length / 2) {
return array[i];
}
result.put(array[i], result.get(array[i]) + 1);
}
// 如果该哈希表中没有该数据则将其添加到哈希表中
else {
result.put(array[i], 1);
}
}
return array[0];
}
}