題目描述
數組中有一個數字出現的次數超過數組長度的一半,請找出這個數字。例如輸入一個長度爲9的數組{1,2,3,2,2,2,5,4,2}。由於數字2在數組中出現了5次,超過數組長度的一半,因此輸出2。如果不存在則輸出0。
思路:
一個數字,如果在數組中出現了超過1/2len的次數,那麼遍歷一遍就可以知道這個數字是什麼。
我們只要做 比較 就可以了
從一開始,我們就做比較,如果相同的話,count ++ 如果不同的話 count--,當count減到0的時候,就將number更換成當前的數字。
這樣是否可以呢?簡單思考一下,如果目標數字 剛和其他數字抵消的話,那麼最後數字就是 len (目標數字數目) -(len(all) - len( all -目標數字數目)),如果其他數字相互抵消的話,這樣更好,這樣最後剩下的count 更多,抵消一對的話+2;
如下圖:第一個圖中,每一個2剛和其他的數字抵消,這樣正好留一下一個,而第二個圖中,一開始1和3抵消了,這樣比第一個圖多留了2個
解答:
public class Solution {
public int MoreThanHalfNum_Solution(int [] array) {
int number =0;
int count =0;
for(int i=0;i<array.length;i++){
if(count ==0){
number = array[i];
count++;
continue;
}else {
if(array[i] == number){
count++;
}else {
count--;
if(count ==0)
number=0;
}
}
}
if(number ==0)
return 0;
else {
int len =0;
for(int i=0;i<array.length;i++)
if(number == array[i])
len++;
if(len >array.length/2)
return number;
else
return 0;
}
}
}