解题思路:先对数组进行排序,我用的是快排,排序好后,出现次数超过一般的数字,就位于数组中间,然后在查找在中间的数。返回就可以了。
public class Demo31数组中出现次数超过一般的数字 {
public static void quickSort1(int arr[],int l,int r){
if(l>r){
return;
}
int p = Partion1(arr,l,r);
quickSort1(arr,l,p-1);
quickSort1(arr,p+1,r);
}
private static int Partion1(int arr[],int l,int r){
//选择给定区间的任意索引为基准
// swap(arr,l, (int) (Math.random()*(r -l + 1)+l));
//选择第一个元素为基准。。。,。。、。。、
int v = arr[l];//
int i = l+1;
int j = r;
while (true){
while ( i <=r &&arr[i]<=v) i++;
while ( j>=l+1&& arr[j]>=v ) j--;
if(i >j) break;
swap(arr,i,j);
i++;
j--;
}
swap(arr,l,j);
return j;
}
private static void swap(int arr[],int i,int j){
int t =arr[i];
arr[i] = arr[j];
arr[j] = t;
}
public static int MoreThanHalfNum_Solution(int [] array) {
int len = array.length/2;
quickSort1(array,0,array.length-1);
int count =0;
int l = 0;
int r = array.length-1;
int mid = l + (r-l)/2;
for(int i = 0;i <array.length;i++){
if(array[i] ==array[mid]){
count++;
}
}
if(count>len){
return array[mid];
}else{
return 0;
}
}
public static void main(String [] args){
int array[] = {1,2,3,2,2,2,5,4,2};
MoreThanHalfNum_Solution(array);
}
}