找出陣列中超過半數的數
阿新 • • 發佈:2019-02-07
題目:陣列中出現次數超過一半的數字
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;
}