1,先排序
先排序,然后在挨着统计每个数字的个数
public int MoreThanHalfNum_Solution(int[] array) {
if (array.length == 1)
return array[0];
//先排序
Arrays.sort(array);
int count = 1;
int num = array[0];
for (int i = 1; i < array.length; i++) {
if (array[i] == num) {//还是原来的数字就加1
count++;
if (count > array.length / 2)
return array[i];
} else {//遇到了新的数字,都重新赋值
count = 1;
num = array[i];
}
}
return 0;
}
2,使用Map解决
还可以使用Map来解决,map的key存放的是数组中的元素
,value是数组中元素的个数
,把数组中元素不断的存放到map中,如果某个元素的个数大于数组长度的一半,直接返回。
public int MoreThanHalfNum_Solution(int[] array) {
Map<integer, integer> counts = new HashMap<>();
int length = array.length;
for (int i = 0; i < length; i++) {
int count = counts.getOrDefault(array[i], 0) + 1;
//如果某个数字出现的个数已经超过数组的一半,自己返回
if (count > length / 2)
return array[i];
counts.put(array[i], count);
}
return 0;
}