一、题目描述
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。
二、解题思路
对数组进行排序,如果其中有一个数字出现的次数超过数组长度的一半,则数组的中间元素必定为该数字。所以可分为两步:
1)对数组进行排序,并找到中间的数;
2)统计该数出现的次数,如果超过数组长度的一半则输出该数,反之输出0。
例如:
奇数个数的数组:{2,3,3,3,1}
排序后:{1,2,3,3,3}
偶数个数的数组:{5,3,3,3,4,3}
排序后:{3,3,3,3,4,5}
三、编程实现
import java.util.Arrays;
public class Solution {
public int MoreThanHalfNum_Solution(int[] array) {
int len = array.length;
if (len < 1) {
return 0;
}
// 对数组进行排序
Arrays.sort(array);
int count = 0;
// num为数组中间元素
int num = array[len / 2];
// 计数中间元素的出现次数
for (int i = 0; i < len; i++) {
if (num == array[i]) {
count++;
}
}
// 如果出现次数没有超过长度的一半,则返回0
if (count <= (len / 2)) {
num = 0;
}
return num;
}
}