offer29--数组中出现次数超过一半的数字

来源:互联网 发布:ubuntu服务器安装java 编辑:程序博客网 时间:2024/05/16 23:34

 

#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

阅读全文
0 0
原创粉丝点击