题目描述
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。你可以假设数组是非空的,并且给定的数组总是存在多数元素。1<=数组长度<=50000,0<=数组元素<=10000
示例
输入
[1,2,3,2,2,2,5,4,2]
输出
2
解题思路
此题牵扯到了计数问题,我们利用map来计数,最后遍历map集,查找value大于数组长度一半的key
代码如下
import java.util.*;
public class Solution {
public int MoreThanHalfNum_Solution(int [] array) {
Map<Integer,Integer> map = new HashMap<>();
for(int i = 0;i < array.length;i++){
if(!map.containsKey(array[i])){
map.put(array[i],1);
}else{
map.put(array[i],map.get(array[i]) + 1);
}
}
for(Map.Entry<Integer,Integer> entry: map.entrySet()){
Integer Key = entry.getKey();
Integer Value = entry.getValue();
if(Value > array.length/2)return Key;
}
return -1;
}
}