题目描述:
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。
题目解析:
先将数组排序,记下数组中间位置的数num;
遍历数组,记录该数出现的次数count,
如果大于数组长度一半长度len/2,则返回该数,否则返回0。
public class Solution {
public int MoreThanHalfNum_Solution(int [] array) {
int len = array.length;
if(len == 0){
return 0;
}
sort(array,0,len-1);
int count = 0;
int num = array[len/2];
for (int i = 0; i < len; i++) {
if(array[i] == num){
count++;
}
}
if(count <= (len/2)){
return 0;
}
return array[len/2];
}
//快速排序
public static void sort(int[] a,int low,int high){
int start = low;
int end = high;
int key = a[low];
while(end>start){
while(end>start&&a[end]>=key)
end--;
if(a[end]<=key){
int temp = a[end];
a[end] = a[start];
a[start] = temp;
}
while(end>start&&a[start]<=key)
start++;
if(a[start]>=key){
int temp = a[start];
a[start] = a[end];
a[end] = temp;
}
}
if(start>low) sort(a,low,start-1);
if(end<high) sort(a,end+1,high);
}
}