天天看點

python大多數元素_分而治之。查找數組中的大多數元素

def majority_element(a):

return max([(a.count(elem), elem) for elem in set(a)])[1]

編輯

如果存在平局,則傳回最大值。E、 g:a = [1,1,2,2]傳回2。可能不是你想要的,但這是可以改變的。在

編輯2

你給出的僞代碼分為數組1到k包括,k+1到n。你的代碼執行1到k-1,k到結尾,但不确定它是否變化很大?如果你想尊重你給出的算法,你應該:

^{pr2}$

同樣,根據您提供的僞代碼,lcount和{}應該與{}比較,而不是{}:

^{3}$

<3

有人在評論中強調,提供僞代碼解決的不是最常見的,而是出現在50%以上的項目。是以,您的示例輸出确實是正确的。很有可能您的代碼已經按原樣工作了。在

編輯4

如果您想在平局時傳回None,我建議您這樣做:def majority_element(a):

n = len(a)

if n == 1:

return a[0]

if n == 0:

return None

sorted_counts = sorted([(a.count(elem), elem) for elem in set(a)], key=lambda x: x[0])

if len(sorted_counts) > 1 and sorted_counts[-1][0] == sorted_counts[-2][0]:

return None

return sorted_counts[-1][1]