Задача состоит в том, чтобы переупорядочить массив так, чтобы arr[i] стал arr[arr[i]] с дополнительным пространством O(1).
Пример:
2 1 3 5 4 0
становится:
3 1 5 0 4 2
Я могу придумать решение O(n²). Решение O(n) было представлено здесь:
- Увеличить каждый элемент массива
arr[i]на(arr[arr[i]] % n)*n.- Разделите каждый элемент на
n.
Но это очень ограничено, так как это вызовет переполнение буфера.
Может ли кто-нибудь придумать улучшение?