Можно создать дубликат:
Check if array B is a permutation of AПерестановка между двумя массивами друг друга?
Учитывая 2 несортированные целые массивы a
и b
одинакового размера. Определите, является ли b
перестановкой a
. Можно ли это сделать в O(n) time
и O(1) space
?
Первое, что пришло мне в голову, это то, что используется XOR
, то есть XOR all the elements of a and b and if the resultant is 0 which means that b is a permutation of a
. Но он приводит примеры, когда этот подход терпит неудачу. Для например -
a: [1 6 0 0 4] -- b: [1 0 6 1 5]
a: [1 6 0 0 5] -- b: [1 0 6 1 4]
Любое одно имея ни малейшего представления, что, как это сделать в O(n) time
и O(1) space
?
- целые числа в ограниченном диапазоне? Можно предположить, что на месте radix sort, если они – amit
@amit: нет ... но мне интересно узнать об этом тоже ... любезно добавить этот случай в качестве ответа ... –
@RaviGupta: ну, я не знаю O (n), но одно эффективное решение - это первая контрольная длина массивов, и если это то же самое, то сортируйте оба массива с использованием любого алгоритма O (nlogn). Затем сравните элементы, если они равны, тогда они являются перестановкой друг друга. И космическая сложность была бы O (1). – ankurtr