题目描述:
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。
解题思路:
1.遍历数组,利用hashmap记录每个数字以及数字出现的次数。时间复杂度为O(n)
import java.util.HashMap;
public class MoreThanHalf {
public static void main(String[] args){
int[] a ={1,2,3,2,2,2,5,4,2};
int res=new MoreThanHalf().moreThanHalf(a);
System.out.println(res);
}
public int moreThanHalf(int[] arr){
if(arr==null||arr.length==0)
return -1;
HashMap<Integer,Integer> map=new HashMap<Integer, Integer>();
for(int i=0;i<arr.length;i++){
if(map.get(arr[i])!=null){
map.put(arr[i],map.get(arr[i])+1);
}else {
map.put(arr[i],1);
}
if(map.get(arr[i])>arr.length/2){
return arr[i];
}
}
return 0;
}
}