题解 | #数组中出现次数超过一半的数字#
数组中出现次数超过一半的数字
https://www.nowcoder.com/practice/e8a1b01a2df14cb2b228b30ee6a92163
import java.util.*;
public class Solution {
public static int num;
public int MoreThanHalfNum_Solution(int [] array) {
qsort(array, 0, array.length - 1);
return num;
}
public void qsort(int []a, int l, int r) {
// Arrays.sort(array);
// return array[array.length/2];
int mid = a[l];
int left = l;
int right = r;
int temp = 0;
Boolean flag = false;
while (left < right) {
//将和mid相等的数不断往中间和后面移动,比mid小的数不断前移
while ( a[left] < mid &&
left < right) {
left++;
}
temp = a[left];
while (a[right] > mid && left < right) { //将和mid相等的数不断往中间和前面移动,比mid大的数不断后移
right--;
}
if(left!=right){//不等则a[left] >= mid && a[right] <= mid
a[left] = a[right];
a[right] = temp;
left++;
right--;
}
// if(left==right)不需要替换成mid,已经是mid
}
if (left >= a.length / 2) {
num = a[a.length / 2];
return ;
} else if (left < a.length / 2) {
if(left==right){
qsort(a, left + 1, r);
}else{
qsort(a, left, r);
}
}
}
}
