offer29 陣列中出現次數超過一半的數字

2021-08-08 16:38:41 字數 806 閱讀 4206

#coding=utf-8

'''offer29--最開始儲存兩個數值:陣列中的乙個數字以及它出現的次數,然後遍歷,如果下乙個數字等於這個數字,那麼次數加一,如果不等,次數減一,當次數等於0的時候,在下乙個數字的時候重新複製新的數字以及出現的次數置為1,直到進行到最後,然後再驗證最後留下的數字是否出現次數超過一半,因為可能前面的次數依次抵消掉,最後乙個數字就直接是保留下來的數字,但是出現次數不一定超過一半。'''

defmorethanhalf(numbers):

l=len(numbers)

if numbers==none or l<=0:

return 0

result=numbers[0]

time=1

for i in range(1,l):

if time==0:

result=numbers[i]

time=1

elif numbers[i]==result:

time+=1

else:

time-=1

if not checkmorehalf(numbers,l,time):

result=0

return result

defcheckmorehalf(numbers,l,time):

time>l/2

return true

if__name__ == '__main__':

list=[1,1,1,1,1,3,4,5,3,3,3,3,3,3,3,6]

s=morethanhalf(list)

print s

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

題目 陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2.分析 看到這個題的時候我首先想的是加乙個輔助陣列,統計出每乙個數出現的次數,因為題目中給的陣列是不知道的所以不能用雜湊儲存的方法,那麼只能用普...

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

題目 陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。拿到題目的第一反應是將陣列排序,然後判斷陣列中間的數字長度是否超過陣列長度的一半。若陣列中出現最多次數的數字為0且長度超過...

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

陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。如果某個數符合條件,它一定是中位數。因此,找出中位數。如果乙個數num,左邊比它小,右邊比它大,它的下標是index。如果ind...