20180723剑指offer题29——数组中出现次数超过一半的数字

寻找众数的Python实现
本文介绍了一种使用Python来找出数组中出现次数超过一半的元素的方法。通过使用字典来辅助计数,并将判断是否超过一半的条件融入计数过程中,以此提高效率。

一、要求

 举个例子:

输入:[1, 2, 3, 2, 2, 2, 5, 4, 2]

输出:2

二、思路及代码

数组中出现次数超过一半的肯定只有1个数组,满足超过一半即可返回,不需要全部计数后判断

用字典进行辅助

def solution(L):
    num={}
    for i in L:
        if i in num:#简单写法:num[i]+=1 if num.get(i) else num[i]=1
            num[i]+=1
        else:
            num[i]=1
        if num[i]>len(L)/2:
            return i


a=[1, 2, 3, 2, 2, 2, 5, 4, 2]
print(solution(a))

 

三、运行结果

2

四、思考与总结

1.这道题 把判断超过一半写在计数的for循环中,可以节省运行时间

2.字典有个用来判断新关键词的简单写法:即用.get(key)

num[i]+=1 if num.get(key) else num[i]=1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值