尝试一
结果:答案正确:恭喜!您提交的程序通过了所有的测试用例
代码:
public class Solution {
public int MoreThanHalfNum_Solution(int [] array) {
//特殊处理
if(array==null || array.length<=0){
return 0;
}
//快速排序
fastSort( 0, array.length-1,array);
/*求中点向两侧与中点值相同的数字的个数是否大于length/2*/
int count=1;
int i=array.length/2;
int right=i+1;
int left=i-1;
while( right<array.length && array[right]==array[i]){
++count;
right++;
}
while(left>-1 && array[left]==array[i]){
++count;
left--;
}
if(count>array.length/2){
return array[i];
}
return 0;
}
/*快速排序*/
private void fastSort(int i,int j,int a[]){
/*递归结束标识*/
if(i >= j ){
return ;
}
/* 从右边找寻比a[i]小的值(最小),交换*/
int minIndex=i;
for(int k=j;k>i;--k){
if(a[k]<a[minIndex]){
minIndex=k;
}
}
if(i!=minIndex){
int temp=a[i];
a[i]=a[minIndex];
a[minIndex]=temp;
}
/* 从左边找寻比a[j]大的值,交换*/
int maxIndex=j;
for(int k=i+1;k<j;++k){
if(a[k]>a[maxIndex]){
maxIndex=k;
}
}
if(j!=maxIndex){
int temp=a[j];
a[j]=a[maxIndex];
a[maxIndex]=temp;
}
//递归
fastSort(i+1,j-1,a);
}
}
思路:
- 先排序(我用的是快速排序)
- 求中点向两侧与中点值相同的数字的个数是否大于length/2
结论
- 快速排序。