/**
* 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
* 例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。
* 由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。
* 如果不存在则输出0。
* 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
* 例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。
* 由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。
* 如果不存在则输出0。
*/
public static int MoreThanHalfNum_Solution(int[] array){
//暂时两种思路:1、创建一个二维数组;第一维存放和数组长度大小一样的值,第二维存放该数字的个数;
//2、声明一个Map<K,V>,将数组中的数作为key,出现的次数作为value;依次对该数组进行遍历,若
//该key已存在,则对value进行加1,否则,将该数组的值作为key添加到map中
if(array.length == 0)
return 0;
Map<Integer,Integer> map = new HashMap<Integer,Integer>();
for(Integer it : array){
if(map.containsKey(it)){
map.put(it, map.get(it) + 1);
}else{
map.put(it, 1);
}
}
//遍历map,返回value超过数组长度的一半的key
int len = array.length;
for(Map.Entry<Integer,Integer> entry : map.entrySet()){
if(entry.getValue() > len/2)
return entry.getKey();
}
return 0;
}