[编程题]数组中出现次数超过一半的数字
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。没有找到输出为0。
思路
首先进行快排
如果 a[i]==a[i+array.length/2] 则返回a[i] 循环 array.length/2次
代码
public class Solution {
public int MoreThanHalfNum_Solution(int [] array) {
quicksort(array, 0, array.length-1);
int count=array.length/2;
for(int i=0;i<array.length;i++){
if(((i+count)<array.length)&&array[i]==array[i+count]){
return array[i];
}
}
return 0;
}
public void quicksort(int[] a,int low,int high){
if(low<high){
int pos=part( a, low, high);
quicksort( a, pos+1, high);
quicksort( a, low, pos-1);
}
}
public int part(int[] a,int low,int high){
int temp=a[low];
while(low<high){
while(low<high&&a[high]>=temp) high--;
a[low]=a[high];
while(low<high&&a[low]<=temp) low++;
a[high]=a[low];
}
a[low]=temp;
return low;
}
}