数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。因为2在数组中出现的次数超过5次,所以输出2.
public static int moreThanHaft(int []numbers) {
int count=1;
int key=numbers[0];
for(int i=1;i<numbers.length;i++)
{
if(numbers[i]==key)
{
count++;
}
else
{
count--;
}
if(count==0)
{
key=numbers[i];
count=1;
}
}
int c1=0;
for(int i=0;i<numbers.length;i++)
{
if(numbers[i]==key)
{
c1++;
}
}
if(c1>(numbers.length/2))
return key;
else
return 0;
}
public static void main(String[] args) {
int []arr = {2,3,2,2,1,2,2,5,4};
System.out.println(moreThanHaft(arr));
}
高效的一种解法
public class overhalfprint {
public static int moreThanHaft(int[] num){
for(int i=0;i<num.length;i++){
int times=0;
for(int j=0;j<num.length;j++) {
if(num[i]==num[j])
times++;
}
if(times>(num.length/2)) {
return num[i];
}
}
return 0;
}
public static void main(String[] args) {
int []arr= {1,3,2,2,6,2,2,7,2};
if(moreThanHaft(arr)==0)
System.out.println("不存在这样的数");
else
System.out.println(moreThanHaft(arr));
}
}
傻瓜解法