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

2021-09-19 10:33:31 字數 923 閱讀 6290

/*

* 採用陣地攻守的思想:

* 第乙個數字作為第乙個士兵,守陣地;count = 1;

* 遇到count為0的情況,又以新的i值作為守陣地的士兵,

* 遇到相同元素,count++;

* 遇到不相同元素,即為敵人,同歸於盡,count--;

* 到最後還留在陣地上的士兵,有可能是主元素。記錄這個可能的主元素的個數是否大於陣列一半即可確定返回值。​

*/class solution

if(length==1)

//第乙個數字作為第乙個士兵,守陣地;count = 1;​

int count = 1;

int cur = array[0];

for(int i=1;i= length ? cur : 0;

}}

/*

* 採用使用者「分形葉」思路(注意到目標數 超過陣列長度的一半,對陣列同時去掉兩個不同的數字,

* 到最後剩下的乙個數就是該數字。如果剩下兩個,那麼這兩個也是一樣的,就是結果),在其基礎上把最

* 後剩下的乙個數字或者兩個回到原來陣列中,將陣列遍歷一遍統計一下數字出現次數進行最終判斷。

*/public class solution

if(length==1)

vectortemparray = array;

for(int i=0;i=length ? result : 0;

}}

陣列排序後,如果符合條件的數存在,則一定是陣列中間那個數

(比如:1,2,2,2,3;或2,2,2,3,4;或2,3,4,4,4等等)

這種方法雖然容易理解,但由於涉及到快排sort,其時間複雜度為o(nlogn)並非最優;

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

題目 陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0.思路一 把陣列排好序,出現次數超過一半的數一定是排好序陣列的中位數。然後取中位數,計算它出現的次數是否超過陣列長度的一半。...

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

分析 最直接的方法,對陣列中所有的數排序,然後再掃瞄一遍,統計各個數出現的次數。如果某個數出現的次數超過一半,則輸出這個數。演算法的時間複雜度是o n log 2n n 如果每次刪除兩個不同的數,那麼,在剩下的數字裡,超過一半的數的個數一樣超過了50 不斷重複這個過程,最後剩下的即 為所求。無需避免...

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

陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。解法一陣列排序後,如果符合條件的數存在,則一定是陣列中間那個數。比如 1,2,2,2,3 或2,2,2,3,4 或2,3,4,4...