劍指offer_面試題39 : 數組中出現次數超過一半的數字( python實現 )

數組中出現次數超過一半的數字( 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。時間複雜度還是爲 O(n)O(n),會增加一定的空間複雜度。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章