数组中出现次数超过一半的数字
第二十七题:数组中出现次数超过一半的数字
题目描述
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。
思路:
①首先要找到该数组中出现次数最多的数字target
②计算target在数组中出现的次数
③排序后,找出数组中的中位数,该数字为数组中出现次数最多的数(超过数组长度一半)
具体实现如下图所示:
具体实现代码如下:
//解法2
public int MoreThanHalfNum_Solution(int [] array) {
if (array == null || array.length == 0){
return 0;
}
//曹操进城
int result = array[0];
//战力为1
int times = 1;
for (int i = 1; i < array.length; i++){
if (array[i] == result){
//兄弟相援
times++;
}else {
//敌军来袭
times--;
}
//空城
if (times == 0){
//重新进城
result = array[i];
times = 1;
}
}
//计算该数字出现的次数
int count = 0;
for (int i = 0; i < array.length; i++){
if (result == array[i]){
count++;
}
}
return count > array.length/2 ? result : 0;
}