Если переставленные части последовательностей содержат одинаковые значения, повторов не будет - выполнение перестановки просто перетасует первые n элементов. Таким образом, значения, которые вам нужно восстановить, являются значениями, которые встречаются в одной из последовательностей перестановки
Во-первых, я бы создал гистограмму из n замененных элементов, причем из последовательности 1 считаются как бит 0, а из последовательности 2 - как бит 1. Если какие-либо элементы гистограммы отличны от нуля, то они происходят только в одной или другой последовательности.
Если есть значения, требующие восстановления, вы можете создать справочную таблицу значений, которые требуют перезаписи. Это должно отобразить i в i, если только i не является одним из асимметричных значений в гистограмме, и в этом случае ему необходимо отобразить другое асимметричное значение.
Seq1: 1 4 5 6 9 8 2 3 7
Seq2: 3 9 1 2 8 7 4 5 6
Если n = 4
Seq1: 3 9 1 2 | 9 8 2 3 7
Seq2: 1 4 5 6 | 8 7 4 5 6
Гистограмма
value 1 2 3 4 5 6 7 8 9
count 3 1 1 2 2 2 0 0 1
отображение последовательности 1 (в то время как гистограмма [S1 [i]] & 1 заменяет [S1 [i]] на S2 [i])
value 1 2 3 4 5 6 7 8 9
replace 1 6 5 4 5 6 7 8 4
применить отображение к последовательности 1 для i> n
Seq1: 3 9 1 2 | 9 8 2 3 7
replace - - - - | 4 8 6 5 7
result 3 9 1 2 | 4 8 6 5 7
отображение последовательности 2 (в то время как гистограмма [S2 [i]] & 2 заменяет [S2 [i]] на S1 [i])
value 1 2 3 4 5 6 7 8 9
replace 1 2 3 9 3 2 7 8 9
применить отображение к последовательности 1 для i> n
Seq2: 1 4 5 6 | 8 7 4 5 6
replace - - - - | 8 7 9 3 2
result 1 4 5 6 | 8 7 9 3 2
В качестве альтернативы, замените следующее значение другим битом, установленным в гистограмме (итеративная замена также должна будет проверять замену значения на себя); Я предполагаю, что на самом деле не имеет значения, какое значение используется в качестве замены, если значения в результате уникальны.