要求:寫一個函數(shù),傳入一個有若干個整數(shù)的列表,該列表中某個元素出現(xiàn)的次數(shù)超過了50%,返回這個元素。
def more_than_half(items): temp, times = None, 0 for item in items: if times == 0: temp = item times += 1 else: if item == temp: times += 1 else: times -= 1 return temp
點(diǎn)評:LeetCode上的題目,在Python面試中出現(xiàn)過,利用元素出現(xiàn)次數(shù)超過了50%這一特征,出現(xiàn)和temp相同的元素就將計(jì)數(shù)值加1,出現(xiàn)和temp不同的元素就將計(jì)數(shù)值減1。
如果計(jì)數(shù)值為0,說明之前出現(xiàn)的元素已經(jīng)對最終的結(jié)果沒有影響,用temp記下當(dāng)前元素并將計(jì)數(shù)值置為1。最終,出現(xiàn)次數(shù)超過了50%的這個元素一定會被賦值給變量temp。