題目描述
數組中有一個數字出現的次數超過數組長度的一半,請找出這個數字。例如輸入一個長度爲9的數組{1,2,3,2,2,2,5,4,2}。由於數字2在數組中出現了5次,超過數組長度的一半,因此輸出2。如果不存在則輸出0。
分析
採用網上大家建議的方法,也就是使用計數器+儲存值的方法,一旦計數器爲0,那就把儲存值變成現在的數字,這個方法只能解決這個序列一定有該數字存在的情況下的結果,如果這個數字不存在,這個算法就不能得出正確的結果,所以還需要再重新遍歷一次數組,看這個最後的儲存值是不是出現了一半以上。
代碼實現
int MoreThanHalfNum_Solution (vector<int> numbers) {
int value = 0;
int count = 0;
for(int i =0;i<numbers.size();i++ ){
if(count == 0){
value = numbers[i];
count++;
}
else if(value == numbers[i]){
count++;
}
else {
count--;
}
}
int times=0;
for(int i =0;i<numbers.size();i++ ){
if(value==numbers[i]){
times++;
}
}
if(times>numbers.size()/2)
return value;
else
return 0;
}