題目:數組中有一個數字出現的次數超過數組長度的一半,請找出這個數字。例如輸入一個長度爲9的數組{1,2,3,2,2,2,5,4,2}。由於數字2在數組中出現了5次,超過數組長度的一半,因此輸出2。如果不存在則輸出0。
解析:
1.不好表達,直接上代碼
public int MoreThanHalfNum_Solution1(int[] array) {
if (array == null){
return 0;
}
//保存初始值
int re = array[0];
//初始計數爲1
int count = 1;
for (int i = 1; i < array.length; i++){
//如果後續值等於前一個值,則計數加1,否則減1
if (re == array[i]){
count++;
}else{
count--;
}
if(count == 0){
re = array[i];
count = 1;
}
}
//重新開始遍歷re出現的次數
count = 0;
for (int i = 0; i < array.length; i++){
if(re == array[i])
count++;
}
//如果re出現的次數大於數組的長度的一半,返回count
return count > (array.length/2)?re:0;
}
2.排序後中間值即爲所求,如果中間值出現的次數大於數組長度的一半,則表明該數字爲需要尋找的數字。
public int MoreThanHalfNum_Solution2(int[] array) {
if (array == null){
return 0;
}
Arrays.sort(array);//排序
int mid = array.length/2;
int count = 0;
for (int i = 0; i < array.length; i++){
if (array[i] == array[mid])
count++;
}
return count>mid?array[mid]:0;
}