给定一个整数数组/列表,输出其中的重复数字。
同时,我真正想知道的是:哪种方案具有最佳的时间性能?最佳的空间性能?是否可能同时具有最佳的时间和空间性能?只是好奇。谢谢!
例如:给定列表[4,1,7,9,4,5,2,7,6,5,3,6,7],则答案为[4,7,6,5](输出顺序无关紧要)。
我用Python编写了一个使用哈希和二分搜索的解决方案。
下面是我的解决方案之一:
def binarySearch(array, number):
start = 0
end = len(array)
mid = (end + start) // 2
while (end > start):
mid = start + (end - start) // 2
if array[mid] == number:
return (mid, True)
elif number > array[mid]:
if start == mid:
return (mid + 1, False)
start = mid
else:
end = mid
return (mid, False)
def findDuplicatesWithHash(array):
duplicatesHash = {}
duplicates = []
for number in array:
try:
index,found = binarySearch(duplicates, number)
if duplicatesHash[number] == 0 and not found:
duplicates.insert(index, number)
except KeyError as error:
duplicatesHash[number] = 0
duplicatesSorted = sorted(duplicates, key=lambda tup: tup)
return duplicatesSorted