数组中出现次数超过一半的数字
数组中出现次数超过一半的数字
http://www.nowcoder.com/questionTerminal/e8a1b01a2df14cb2b228b30ee6a92163
HashMap方法:
哈希表统计法: 遍历数组 nums ,用 HashMap 统计各数字的数量,
//最终超过数组长度一半的数字则为众数。此方法时间和空间复杂度均为 O(N)O(N)
public int MoreThanHalfNum_Solution(int [] array) { HashMap<Integer,Integer> map = new HashMap<>(); int max = array.length / 2; //哈希表统计法: 遍历数组 nums ,用 HashMap 统计各数字的数量, //最终超过数组长度一半的数字则为众数。此方法时间和空间复杂度均为 O(N)O(N) for(int i = 0;i<array.length;i++){ if(!map.containsKey(array[i])){ map.put(array[i],1); }else{ map.put(array[i],map.get(array[i])+1); } } for(int key:map.keySet()){//map.keySet()获取key集合 if(map.get(key)>max){ return key; } } return 0; }
排序法:位于中间的是众数
public int MoreThanHalfNum_Solution(int [] array) { Arrays.sort(array); int len = array.length; int midlen = (0+len-1) /2; int out = array[midlen]; int count = 0; for(int i = 0;i<len;i++){ if(array[i] == array[midlen]) count++; } if(count >(len/2)) return out; return 0; }