Ну естественно!
Да, оптимальное решение требует знать алгоритм Флойда, чтобы решить за O(n) и O(1)
Да оно выглядит вот так
def find_duplicate_num(nums: list[int]) -> int:
# фаза 1: найти точку пересечения
slow = 0
fast = 0
while True:
slow = nums[slow]
fast = nums[nums[fast]]
if slow == fast:
break
# фаза 2: найти вход в цикл
slow = 0
while slow != fast:
slow = nums[slow]
fast = nums[fast]
return slow
ДА! Тут нифига непонятно
Но это не значит, что тебя не спросят 😂
Что имеем, то имеем...
Благо задачку дают не часто, но если идешь в Озон, я б глянул ее заранее
