Инвертировать перестановку в линейное время, используя только списки

Я хочу определить функцию

invert :: [Int] -> [Int]

, которая предполагает, что ее вход является перестановкой [0 .. (n-1)] и возвращает обратное.Можно ли определить его, используя только списки и кортежи (без массивов), чтобы он работал в линейном времени?

Это в первую очередь вне академического интереса; в реальном коде я мог бы использовать Array или STArray или аналогичный.

8
задан duplode 16 July 2019 в 22:31
поделиться