面试的时候一道算法题,感觉挺简单的,结果却做的不是很完美,下来以后改进一下,当作一个教训。
代码
def get_count_max_ele(s):
max_count = 0 # 记录最大的次数
dct = {} # 键为元素,值为次数
for i in range(len(s)):
if s[i] not in dct: # 元素不在列表里,就加上,s[i]为键
dct[s[i]] = 1 # 赋值为 1
else:
c = dct[s[i]] + 1 # 计数
dct[s[i]] = c # 更新次数
if c > max_count:
max_count = c
return [k for k, v in dct.items() if v == max_count] # 根据列表的值获取键
这里“根据列表的值获取键”详见根据列表的值获取键
测试
1. 最大次数唯一的列表
s = [1, 2, 3, 4, 1]
print(get_count_max_ele(s))
结果
1 出现了两次,其他都是一次,所以返回 1
2. 最大次数不唯一的列表
s = [1, 2, 3, 4, 1, 2, 3]
print(get_count_max_ele(s))
结果
1,2,3 均出现了两次,所以都返回
总结
需要考虑次数唯一和不唯一的情况,遇到其他算法也应该考虑类似的问题,对基础语法还要加强训练。