數組中出現次數超過一半的數字( python實現 )
一、題目描述
題目:數組中出現次數超過一半的數字
數組中有一個數字的次數超過數組長度的一半,請找出這個數字。例如,輸入一個長度爲 9 的數組 {1, 2, 3, 2, 2, 2, 5, 4, 2}。由於數字 2 在數組中出現了 5 次,超過數組長度的一半,因此輸出 2。
二、解題思路
暫略。(此處主要作爲書中python實現補充)
三、代碼實現
從題目可知,數組中肯定是存在次數超過長度一半的數字,因此,可採用以下代碼實現的方式。
def MoreThanHalfNum(arr):
if len(arr) == 0:
return
result = arr[0]
times = 1
for i in range(1,len(arr)):
if times == 0:
result = arr[i]
times = 1
elif result == arr[i]:
times = times+1
else:
times = times-1
return result
簡單舉例測試如下:
>>> arr = [1, 2, 3, 2, 2, 2, 5, 4, 2]
>>> MoreThanHalfNum(arr)
Out:
2
補充 :若是要處理的數組中,有可能不存在超過一半的數字,以上代碼返回的結果就有問題了。可考慮 Python 的字典,記錄下每個數字 ( key ) 及其出現次數 ( value ),然後掃描字典,返回 value 值大於長度一半所對應的 key,若是沒有,則返回 None。時間複雜度還是爲 ,會增加一定的空間複雜度。