筆試題5 陣列中超過一半的數

2021-08-04 16:58:49 字數 511 閱讀 2652

在o(n)的時間內找出陣列中超過一半的數,如:3 4 2 3 5 3 3,數字3超過半數

bool g_b = false;           //全域性變數用來判斷是不是陣列中的數

int morethanhalfnum(int a, int len)

int k, icount = 0;

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

else

}//很多人寫完上面的**,覺得沒問題了,其實不然,如:1、2、3;icount為1,能說明3超過一半嗎

if (icount == 0) //icount為0,說明沒有

icount = 0;

for (int i = 0; i < len; i++) //計算上面k的數目

if (k > len / 2) //大於板書才說明真的超過一半

return k;

else

}

陣列中超過一半的數字

陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。思路 定義乙個變數儲存當前元素,乙個計數器儲存次數,若次數等於0,則重新取字元。若次數大於零,遇到相同字元計數器 1,不同字元計...

找出陣列出現次數超過一半的數

例如 陣列中1出現了5次超過長度9的一半。因此輸出1 注 這裡沒有考慮出現次數最多的數字是0的情況,關鍵在於方法 這裡給出兩種常用方法 這種演算法優點在於理解起來比較容易,如果乙個數出現次數超過長度的一半,那將陣列排序之後位於陣列中間位置的數一定就是要找到的數。注 需要檢測一下中間的數是否是超過一半...

陣列中出現次數超過一半的數

採用陣地攻守的思想 第乙個數字作為第乙個士兵,守陣地 count 1 遇到count為0的情況,又以新的i值作為守陣地的士兵,遇到相同元素,count 遇到不相同元素,即為敵人,同歸於盡,count 到最後還留在陣地上的士兵,有可能是主元素。記錄這個可能的主元素的個數是否大於陣列一半即可確定返回值。...