刷题(四)

题目

给定一个只包含正整数且非空的数组,返回该数组中重复最多的前N个数字(返回结果按重复次数从多到少排列,N不存在取值非法的情况),请用熟悉的语言实现该需求。10分钟之内写出来

思路

1.假设列表(数组)为a,使用set将该数组过滤,得到一个新的列表sorted_a,这个sorted_a是不重复的
2.对sorted_a进行遍历,用遍历的元素去统计a中该元素的重复个数
3.将元素和重复个数分别作为key,value,构造成新的字典my_dict
4.使用sorted(my_dict.values(), reverse=True)将新字典的值倒序输出
5.定义一个空列表new_a,然后遍历倒序排列的新字典的值,使用key,value去遍历新字典my_dict,如果my_dict的value等于倒序配列的新字典的值,且列表中没有该key,则通过append的方式将该key添加到空列表new_a中
6.最后打印输出new_a

代码实现

a = [1, 6, 7, 4, 4, 5, 4, 5, 4, 5, 5, 6, 7, 8, 5, 6, 7, 3, 4, 2, 2, 1, 4, 8, 9, 4, 5, 6]


my_dict = {}
set_a = set(a)

for item in set_a:
    if item in a:
        count = a.count(item)
        my_dict[item] = count


new_a = []
reverse_values = sorted(my_dict.values(), reverse=True)
for item in reverse_values:
    for key, value in my_dict.items():
        if item == value:
            if key not in new_a:
                new_a.append(key)

print(new_a)

猜你喜欢

转载自www.cnblogs.com/my_captain/p/12807755.html
今日推荐