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

2021-08-19 19:56:22 字數 840 閱讀 7110

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

最先想到的是對陣列記性排序,然後遍歷陣列找出出現次數

超過陣列長度的一半的數。該方法的時間複雜度就是排序用的時間,即最快的排序演算法的時間複雜度o(nlogn)。

class solution 

return 0;

}};

如果

乙個數字出現的次數超過陣列長度的一半,那麼在排序後,這個數字應該位於陣列的中間位置,所以可以在對陣列進行排序後,直接取中間位置的數字,但需要考慮不存在

出現的次數超過陣列長度的一半的數字的情況,所以在

取中間位置的數字後,需要遍歷一遍統計其出現次數進行檢驗。(改進:也可以利用快排思想,利用遞迴找到處於陣列中間位置的數字,而不需要對整個陣列排序排序完)

class solution 

};

利用map記錄每個數字以及數字出現的次數,其中key為陣列元素值,value為此數出現的次數。遍歷一遍陣列,統計每個數出現的次數,判斷有沒有出現次數超過陣列長度的一半的值。此時的時間複雜度為 o(n),空間複雜度為o(n)。個人比較喜歡這種方法,實現起來簡單,不過空間複雜度大一些。

class solution 

return 0;

}};

如果乙個數字出現的次數超過陣列長度的一半,所以這個數字出現的次數比其他數出現的次數的總和還多。

class solution 

};

劍指offer 陣列在排序陣列中出現的次數

記錄次數,直接用data.count k 也通過了。或者常規演算法,出現有序用二分查詢。class solution def getnumberofk self,data,k write code here if len data 0 return 0 count 0 low 0 high len ...

劍指offer第39 陣列中出現次數超過一半的數字

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

劍指Offer 028陣列中出現次數超過一半的陣列

028陣列 現次數超過一半的陣列 題目 陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列 現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0 方法 map統計法 思路 遍歷陣列,用map來記錄每個數出現的次數,最後再遍歷map查詢是...