题目
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。
思路
排序后找中位数,看出现的次数是否超过一半
代码
import java.util.Arrays;
public class solution {
//数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}
//由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。
public static void main(String[] args) {
// TODO Auto-generated method stub
int a[]=new int[]{1,2,3,2,2,2,5,4,2};
int aim=search(a);
System.out.println(aim);
}
public static int search(int a[]) {
int length=a.length;
if(length<0) {
return 0;
}
Arrays.sort(a);
int sum=0;
int b=a[length/2];
for(int i=0;i<length;i++) {
if(b==a[i]) {
sum++;
}
}
if(sum<=(length/2)) {
return 0;
}
return b;
}
}