MoreThanHalfNumber
Description
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如,输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组出现了5次,超过了数组长度的一半,因此输出2.
Solution
哈希表解决。在剑指offer50题的基础稍作修改即可。
Code
import java.util.HashMap;
import java.util.Map;
public class jianzhioffer39 {
public static int moreThanHalfNum1(int[] data){
int l=data.length;
int m=l/2;
int k=4;
if(data==null || l==0)
return 0;
Map <Integer, Integer> map = new HashMap<Integer,Integer>();
for (int i = 0; i < l; i++) {
if (map.containsKey(data[i])){
int value = map.get(data[i]);
map.put(data[i], value+1);
}else {
map.put(data[i], 1);
}
}
for (int i = 0; i < l; i++) {
if (map.get(data[i]) >=m ){
//System.out.println(data[i]);
k=data[i];
break;
}
}
return k;
}
public static void main(String[] args){
int[] data = {1,2,3,2,2,2,5,4,2};
System.out.println(moreThanHalfNum1(data));
}
}
Appendix
1.没有利用到排序,后续可以用排序来再做一遍,会涉及到统计学上的中位数。