1. 程式人生 > >找出陣列中超過半數的數

找出陣列中超過半數的數

題目:陣列中出現次數超過一半的數字

idea:

solution1:如果是排序好的陣列,則位於陣列正中間位置的數字即為要尋找的數字。因此先對陣列進行排序,再取出中間位置的數字。該解法需要對陣列排序,時間複雜度略高

solution2:利用快排的想法,找到下標是陣列中間位置的數字即為輸出的數字,並不需要該資料前部分和後半部分的數字按順序排列。

solution3:利用陣列的特性,如果將陣列中兩兩不相等的數字配對,則剩餘未被配對的資料即為要輸出的數字。其中,配對成功的數字對中不包含需要找出的數字也沒關係,對演算法的結果不造成影響。

針對解法3,遍歷陣列,每次刪除陣列中不相等的兩個數字,最後剩餘的數即為要找的數。

int find_the_element(int a[])

{

    int element;  //表示未被匹配的數字

    int times=0;  //表示element未被匹配的個數

    for(int i=0;i<n;i++)

       {

if(times==0)

{element=a[i];

 times++;}

else

if(element==a[i])

times++;

else

times--;

}

return element; 

}