Вы можете сделать O(n)
, это вопрос об интервью Google, у которого есть видео на YouTube, как мне кажется. Или, по крайней мере, у них была очень похожая проблема:
def twoSum(nums, target):
values = dict()
for index, n in enumerate(nums):
if target - n in values:
return values[target - n], index
else:
values[n] = index
print(twoSum([4, 5, 2, 1, 3], 4)) # (3, 4)
- Правка -
Согласно комментариям ниже, это решение технически все еще имеет наихудший случай O(n^2)
для хэширования коллизий. В большинстве случаев вы должны приблизиться к O(n)
, но если вы работаете с большими числами (отрицательными или положительными), вы увидите увеличение числа столкновений, что приведет к n * log(n)
до n^2
времени (особенно если набор тестов, заданный для вы пытаетесь нацелить хэш-коллизии).