Leetcode - Три суммы
https://leetcode.com/problems/3sum/
def threeNumberSum(array, targetSum):
array = sorted(array)
results = []
for idx, elem in enumerate(array):
i = idx + 1
j = len(array) - 1
target = targetSum - elem
while i < j:
currentSum = array[i] + array[j]
if currentSum == target:
result = [array[i], array[j], array[idx]]
results.append(sorted(result))
i += 1
j -= 1
elif currentSum < target:
i += 1
else:
j -= 1
return results
Так что время O (n ^ 2), я в порядке, но пространство есть O (n), согласно Algoexpert.io, и я не уверен, почему. Его объяснение было следующим:
"Мы можем в конечном итоге сохранить каждое число в нашем массиве, если каждое число используется в некотором триплете, мы будем хранить много чисел, и оно будет связано через O (n). Даже если некоторые числа используются несколько раз, они будут ограничены O (n) "
Но я пока не могу понять его объяснение. Если предоставленный массив имеет (почти) все уникальные триплетные перестановки, суммирующие это целевое число, не будет ли сложность пространства n выбрать 3 вместо этого? Если его n выбрать k = 3, упрощение приведет к O (n ^ 3).
Обратите внимание, однако, что у проблемы Algoexpert есть одно дополнительное предположение с входным массивом, что каждый элемент будет отличаться, тогда как Leetcode версия не имеет такого предположения. Как бы я официально обратился к этой информации в анализе сложности космоса?