Найти дубликат за O(1) памяти
Два указателя
Легкая
Массив nums длины n+1 содержит числа из диапазона [1, n]. Ровно одно число повторяется (возможно, больше одного раза), остальные встречаются ровно по разу.
Найдите повторяющееся число, не изменяя массив и используя O(1) дополнительной памяти (то есть без хеш-множества).
Подсказка: если рассматривать nums[i] как указатель на следующий индекс i -> nums[i], массив превращается в связный список с циклом - воспользуйтесь алгоритмом обнаружения цикла (черепаха и заяц).
Сигнатура функции
find_duplicate(nums: list[int]) -> int
Примеры
| Вход | Ожидаемый результат |
| [[1, 3, 4, 2, 2]] | 2 |
| [[3, 1, 3, 4, 2]] | 3 |
1решили
1пытались
100%успешность
Войдите, чтобы решить →