#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...