DrRacket/Scheme编程求助:编写无重复数字判断函数
判断列表是否无重复数字的函数实现
这里提供几种简洁高效的实现方式,以Python为例:
方法一:利用集合去重特性(最简洁)
集合会自动剔除重复元素,通过比较原列表和集合的长度即可判断是否存在重复:
def has_unique_numbers(num_list): return len(num_list) == len(set(num_list))
- 原理:如果列表无重复,集合长度和原列表长度一致;若有重复,集合会自动去重,长度更小。
- 时间复杂度:O(n),集合创建过程为线性遍历。
方法二:遍历+集合记录(提前终止)
遍历列表时用集合记录已出现的元素,遇到重复直接返回结果,无需遍历整个列表:
def has_unique_numbers(num_list): seen = set() for num in num_list: if num in seen: return False seen.add(num) return True
- 优势:当列表前半部分存在重复时,会立即返回结果,比方法一更高效。
- 时间复杂度:最坏情况O(n),最好情况O(1)(第一个元素就重复)。
方法三:排序后检查相邻元素
先对列表排序,重复元素会相邻,遍历检查相邻元素是否相等:
def has_unique_numbers(num_list): sorted_list = sorted(num_list) for i in range(len(sorted_list) - 1): if sorted_list[i] == sorted_list[i+1]: return False return True
- 适用场景:对内存使用有要求,不想额外存储整个集合的情况。
- 时间复杂度:O(n log n),主要由排序操作决定。
内容的提问来源于stack exchange,提问作者sbb123
相关产品推荐
相关产品推荐

