#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