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

2021-07-12 04:48:22 字數 862 閱讀 2904

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

陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。

class solution }}

count = 0;

for(auto i : numbers)

if(i==k) count++;

if(count>=numbers.size()/2)

return k;

else

return 0;

}};

思想是:引用這篇部落格的原話

方法三這個方法借用了別人的思路。

在這裡我做一下簡單的分析。

這個演算法的時間複雜度是o(n),另外用了兩個輔助變數。

k用於臨時儲存陣列中的資料,j用於儲存某個數出現的次數。

開始時k儲存陣列中的第乙個數,j為0,如果陣列出現的數於k相等,則j加1,否則就減1,如果j為0,就把當前陣列中的數賦給k

因為指定的數出現的次數大於陣列長度的一半,所有j++與j--相抵消之後,最後j的值是大於等於1的,k中存的那個數就是出現最多的那個數。

下面這個演算法只適合陣列中陣列中某個數的出現次數超過陣列長度一半的陣列,符合題意。

或者,引用討論版

cm問前程的原話

採用陣地攻守的思想: 第乙個數字作為第乙個士兵,守陣地;count = 1; 遇到相同元素,count++; 遇到不相同元素,即為敵人,同歸於盡,count--;當遇到count為0的情況,又以新的i值作為守陣地的士兵,繼續下去,到最後還留在陣地上的士兵,有可能是主元素。 再加一次迴圈,記錄這個士兵的個數看是否大於陣列一般即可。

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

何海濤 劍指offer 名企面試官精講典型程式設計題 九度oj 題目描述 陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。輸入 每個測試案例包括2行 第一行輸入乙個整數n 1 n 100000 表...

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

題目描述 陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。解題思路 將陣列按大小排序,若存在數字出現次數超過陣列長度的一般,則陣列中位數必定為該數字 1 將陣列排序完成後,取a...

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

1 利用快速排序,排好序中間的值就是出現次數超過一半的數字 注意 判斷陣列是否有效,判斷出現次數頻率是否超過陣列大小的一半 include include include include using namespace std bool g invalid true int partsort int...