我是TOTAL Noob,所以请保持温柔!
我已经编写了这段代码:
def sorted_has_duplicate(numbers):
numbers.sort()
duplicate = False
for num in range(len(numbers)-1):
if numbers[num] == numbers[num + 1]:
duplicate = True
break
return duplicate
代码运行正常,它应该执行的操作是找到列表中的第一个重复值(如果有)并返回True or False
。
我的问题是,如果列表未排序(不允许排序)并且我只能使用内置的python函数,我如何让相同的函数执行相同的任务?
答案 0 :(得分:2)
迭代时在set
中收集数字:
def has_duplicate(numbers):
seen = set()
for num in numbers:
if num in seen:
return True
seen.add(num)
return False
您也可以将其缩短为:
def has_duplicate(numbers):
return len(numbers) != len(set(numbers))
这只是检查list
是否具有与其set
一样多的元素,根据定义,这些元素没有重复项。
请注意,这两个基于集合的解决方案都是线性运行的,因为集合的O(1)
包含检查。在列表剩余部分中搜索每个元素的幼稚蛮力方法
def has_duplicate(numbers):
for i, num in enumerate(numbers):
if num in numbers[i+1:]:
return True
return False
由于列表的O(N)
包含检查而为二次方。