數組中有一個數字出現的次數超過數組長度的一半,請找出這個數字。例如輸入一個長度爲9的數組{1,2,3,2,2,2,5,4,2}。由於數字2在數組中出現了5次,超過數組長度的一半,因此輸出2。如果不存在則輸出0。
解題思路:
如果有符合條件的數字,則它出現的次數比其他所有數字出現的次數和還要多。
在遍歷數組時保存兩個值:一是數組中一個數字,一是次數。遍歷下一個數字時,若它與之前保存的數字相同,則次數加1,否則次數減1;若次數爲0,則保存下一個數字,並將次數置爲1。遍歷結束後,所保存的數字即爲所求。然後再判斷它是否符合條件即可。
public class MoreThanHalfNum_Solution {
public int MoreThanHalfNum_Solution(int [] array) {
int cur = 0;
int times = 0;
int length = array.length;
if (length <= 1) {
return length == 1 ? array[0] : 0;
}
cur = array[0];
times = 1;
for (int i = 1; i < length; i++) {
if (cur == array[i]) {
times++;
} else {
if(i != length-1) {//當最後一個數字和當前保存的數字不相等時,不對次數遞減
times--;
}
if(times == 0) {
cur = array[i];
times = 1;
}
}
}
return times > 1 ? cur : 0;
}
}