题目描述
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。
//1,利用HashMap;2,利用数组排序;3,枚举法(暴力算法)
public class 数组中数字超过一半的数字 {
HashMap<Integer, Integer>hashMap=new HashMap<>();
public int MoreThanHalfNum_Solution1(int [] array) {
if(array.length==0||array==null)
return 0;
Map<Integer,Integer> map=new HashMap<Integer,Integer>();
for(int i=0;i<array.length;i++){
if(map.containsKey(array[i])){
map.put(array[i], map.get(array[i])+1);
}else{
map.put(array[i], 1);
}
}
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
if(entry.getValue()>array.length/2)
return entry.getKey();
}
return 0;
}
public int MoreThanHalfNum_Solution2(int [] array) {
if(array.length == 0 || array == null){
return 0;
}
Arrays.sort(array);
int mid = array[array.length/2];
int j = 0;
for (int i : array){
if (i == mid){
j++;
}
}
return j > array.length/2 ? mid : 0;
}
public int MoreThanHalfNum_Solution3(int [] array) {
int l=array.length-1;
int count=0;
int helf=(l+1)/2;
if(array.length==0){
return 0;
}
for(int i=0;i<=l;i++){
for(int j=0;j<=l;j++){
if(array[i]==array[j]){
count++;
}
}
if(count>helf){
return array[i];
}
count=0;
}
return 0;
}
public static void main(String[] args)
{
数组中数字超过一半的数字 m=new 数组中数字超过一半的数字() ;
int array[]= {1,2,3,4,2,2,2,3,2};
System.out.println(m.MoreThanHalfNum_Solution1(array));
}
}