https://uploadfiles.nowcoder.com/images/20220303/523247478_1646306407396/D2B5CA33BD970F64A6301FA75AE2EB22
//方法一:排序+统计
import java.util.Arrays;
public class Solution {
public int MoreThanHalfNum_Solution(int [] array) {
//先排序
//循环遍历
//统计连续几个相同数字的个数
//超过半数则返回值
//没超过半数,则继续循环
Arrays.sort(array); //先排序
int count = 1;
int num = array[0];
for(int i=1; i<array.length; i++){
//统计连续几个相同数字的个数
if(array[i] == num){
count++;
//超过半数则返回值
if(count>(array.length>>1))
return num;
}
//没超过半数,则继续循环
else{
num = array[i];
count = 1;
}
}
return num;
}
}
//方法二:hashmap
import java.util.*;
public class Solution {
public int MoreThanHalfNum_Solution(int [] array) {
//使用map(key, value)来做
//类似新建一个数组,以原数组的值为下标,以该下标存放的值是个数
//新建一个HashMap对象
//然后遍历数组
//将数组的元素作为map中的key, 元素的个数count作为map中的value
//统计count个数是否大于半数以上
//大于半数,输出结果
//否则就重新循环
Map<Integer, Integer> map = new HashMap();
for(int i=0; i<array.length; i++){
// 哈希表的getOrDefault(key, default)方法,
//是在哈希表中搜索是否存在该方法参数列表中的key值,
//如果存在该key值,则返回哈希表中该key值对应的vakue值;
//如果不存在,则返回该方法参数列表中的default值
//开始map中没有array[i], 默认返回值是0
int count = map.getOrDefault(array[i], 0) + 1;
//大于半数,输出结果
if(count>(array.length>>1))
return array[i];
//否则就重新循环
else{
map.put(array[i], count);
}
}
return 0;
}
}
//方法三:遍历数组
//for(元素类型int 元素变量x : 遍历对象obj)
import java.util.*;
public class Solution {
public int MoreThanHalfNum_Solution(int [] array) {
//使用map(key, value)来做
//类似新建一个数组,以原数组的值为下标,以该下标存放的值是个数
//新建一个HashMap对象
//然后遍历数组
//将数组的元素作为map中的key, 元素的个数count作为map中的value
//统计count个数是否大于半数以上
//大于半数,输出结果
//否则就重新循环
Map<Integer, Integer> map = new HashMap();
for(int x : array){
// 哈希表的getOrDefault(key, default)方法,
//是在哈希表中搜索是否存在该方法参数列表中的key值,
//如果存在该key值,则返回哈希表中该key值对应的vakue值;
//如果不存在,则返回该方法参数列表中的default值
//开始map中没有array[i], 默认返回值是0
int count = map.getOrDefault(x, 0) + 1;
//大于半数,输出结果
if(count>(array.length>>1))
return x;
//否则就重新循环
else{
map.put(x, count);
}
}
return 0;
}
}