2016年模拟笔试题--微信红包问题

6

2016年模拟笔试题--微信红包问题

算法思路:

首先,我们需要统计每个红包金额出现的次数。可以使用一个字典来记录每个金额出现的次数。

然后,我们遍历字典中的每一个键值对,如果当前红包金额出现的次数超过了总红包数的一半,就找到了那个红包金额。

代码实现:

def find_red_packet(red_packets):

count_dict = {} 用来记录每个红包金额出现的次数 for packet in red_packets:

if packet in count_dict:

count_dict[packet] +=1 else:

count_dict[packet] =1 for packet, count in count_dict.items():

if count > len(red_packets) /2:

return packet测试代码:

red_packets = [1,2,3,2,2,2]

print(find_red_packet(red_packets)) 输出2red_packets = [1,2,3,3]

print(find_red_packet(red_packets)) 输出3red_packets = [1,2,3,3,3]

print(find_red_packet(red_packets)) 输出3代码解析:

1. 首先我们定义一个字典count_dict来记录每个红包金额出现的次数。

2. 遍历red_packets中每一个红包金额,如果该金额已经在count_dict中,就将它对应的值加1;如果不在count_dict中,就将它作为一个新的键,值为1。

3. 遍历count_dict中每一个键值对,如果某个红包金额出现的次数大于红包总数的一半,就返回该红包金额。

4. 如果没有找到满足条件的红包金额,就返回None。

算法分析:

该算法的时间复杂度为O(n),其中n为红包数量。第一个for循环遍历一次红包列表,将每个红包金额的出现次数记录在字典count_dict中;第二个for循环最多遍历red_packets中的不同金额的个数,即O(k),其中k为不同金额的个数。因此,该算法的时间复杂度为O(n+k)。在最坏的情况下,所有红包金额都不同,即k=n,那么时间复杂度为O(2n),即O(n)。

该算法的空间复杂度为O(k),即红包金额的种类数。因为我们需要使用一个字典count_dict来记录每个金额的出现次数。

红包微信算法测试

版权声明:除非特别标注,否则均为网络文章,侵权请联系站长删除。

上一篇 分享一个微信红包封面过审方法

下一篇 微信红包系统设计方案