陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列**現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。
思路:我們設定乙個用於記錄數字num出現次數的變數,如果陣列的下乙個元素等於當前num,那麼次數就加1,否則次數減1。如果次數減小為0,那麼就當當前陣列數字設定為num,次數重置為1。繼續迴圈操作。
因為,如果乙個元素超過了陣列元素的一半的話,那麼經過上面的算下來,剩下來的那個num肯定就是這個元素。但是這個只是必要條件,並不是充分條件。也就是說迴圈下來最後的那個元素,未必就能保證這個num的個數大於陣列元素個數一半。舉個例子,假設陣列三個元素,[1, 2, 3]那麼3就是最後剩下來的那個元素,但是陣列中只有乙個3。所以最後要驗證一下。
class solution
}count = 0;
for (const auto& e : numbers)
if (count > numbers.size() / 2.0)
return num;
return 0;
}};
28 陣列中出現次數超過一半的數
陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。解法一陣列排序後,如果符合條件的數存在,則一定是陣列中間那個數。比如 1,2,2,2,3 或2,2,2,3,4 或2,3,4,4...
陣列中出現次數超過一半的數
採用陣地攻守的思想 第乙個數字作為第乙個士兵,守陣地 count 1 遇到count為0的情況,又以新的i值作為守陣地的士兵,遇到相同元素,count 遇到不相同元素,即為敵人,同歸於盡,count 到最後還留在陣地上的士兵,有可能是主元素。記錄這個可能的主元素的個數是否大於陣列一半即可確定返回值。...
陣列中出現超過一半的次數
題目 陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0.思路一 把陣列排好序,出現次數超過一半的數一定是排好序陣列的中位數。然後取中位數,計算它出現的次數是否超過陣列長度的一半。...