I am a teacher!

导航

习题解析之:查找数列中重复数字

【问题描述】

在一个无序的整数序列中,存在多个重复的数据(出现次数超过1次),用列表的形式将这些重复的数据从小到大输出。

输入格式
以空格分隔的若干个整数

输出格式
按数值从小到大排列,列表形式,元素为整数。
如果没有找到重复的数,则输出空列表[]
本题部分用例有运算时间要求。

示例
输入:
4 1 1 2 3 4

输出:
[1, 4]

【编程思路1】

        由输入的无序整数序列创建一个列表 ls,用列表推导式  [x for x in ls if ls.count(x) > 1] 创建一个列表 lt,lt 列表中的元素就是 ls 列表中出现次数超过 1 次的整数。

        由 lt 列表创建一个集合 set(lt) ,输出该集合排序后返回的列表即可。

        编写的源程序如下:

        image

【编程思路2】

        由输入的无序整数序列创建一个列表 ls。创建一个空字典 d ,遍历 ls 中的各元素,将元素的值作为键,该元素出现的次数作为值,加入到字典 d 中。

        再创建一个空列表 ans 作为问题答案的列表,遍历按键值对排序后的字典 d 中的键值对,将值大于1 的键插入到列表 ans 中。

        最后输出ans 即可。

        编写的源程序如下:

        image

          当然,上面程序中的 ans 列表也可以用列表推导式来生成,编写的源程序如下:

        image

【编程思路3】

       由输入的无序整数序列创建一个列表 ls,再创建一个空列表 ans 作为问题答案的列表。

        将列表 ls 排序,则值相同的整数一定前后相邻。用循环 for i in range(1,len(ls)): 遍历列表 ls 中的元素,若一个元素 ls[i] 和它前面的元素 ls[i - 1] 相同(即它重复出现了),并且又不在列表 ans 中,则将其加入到列表 ans 中。

        编写的源程序如下:

        image

posted on 2025-12-03 15:25  aTeacher  阅读(27)  评论(0)    收藏  举报