数组中出现次数超过一半的数字
数组中出现次数超过一半的数字
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;
}
滴滴公司福利 1754人发布