题目
找出数组中出现次数超过一半的数,时间复杂度O(n)。
分析
把每个数和出现的次数以key-value的形式存储在map中,每次循环都把当前数出现的次数和数组长度的一半作比较即可,例如{1,2,2,3,3,3,3,3,4},3出现的次数超过了数组长度的一半。
实现
public static int MoreThanHalfNum_Solution(int[] array){
Map<Integer,Integer> map = new HashMap<>();
for (int i = 0; i < array.length; i++) {
if (map.containsKey(array[i])){
int count = map.get(array[i]);
count += 1;
map.put(array[i],count);
}else {
map.put(array[i],1);
}
if (map.get(array[i]) > array.length/2){
return array[i];
}
}
return 0;
}