分析:我们通过将数组元素的值作为Map对象的key,value为数组元素出现的次数。遍历整个数组。然后对map对象按照value来进行倒排序,即value最大也就是出现次数最多的元素在前。最后根据次数返回map对象的键即可。
import java.util.*;
public class Solution {
HashMap<Integer,Integer> map=new HashMap<Integer,Integer>();
public int MoreThanHalfNum_Solution(int [] array) {
if(array.length==0 || array==null){
return 0;
}
for(int i=0;i< array.length;i++){
if(map==null){
map.put(array[i],1);
}else{
if(map.containsKey(array[i])){
//map中已经存有该元素
//获取该元素在map有几份,也就是在数组中出现了几次
int count=map.get(array[i]);
map.put(array[i],count+1);
}else{
//新元素
map.put(array[i],1);
}
}
}
//按照值进行排序
ArrayList<Map.Entry<Integer,Integer>> list=sortMap(map);
if(list.get(0).getValue() > array.length/2){
return list.get(0).getKey();
}else{
return 0;
}
}
public ArrayList<Map.Entry<Integer,Integer>> sortMap(Map map){
List<Map.Entry<Integer, Integer>> entries = new ArrayList<Map.Entry<Integer, Integer>>(map.entrySet());
Collections.sort(entries, new Comparator<Map.Entry<Integer, Integer>>() {
public int compare(Map.Entry<Integer, Integer> obj1 , Map.Entry<Integer, Integer> obj2) {
return obj2.getValue() - obj1.getValue();
}
});
return (ArrayList<Map.Entry<Integer, Integer>>) entries;
}
}