我有两个长度相同的数组A
和B
。
A
和B
包含相同的元素,但顺序不同。
我需要通过只交换A
中的任意两个元素来使B
与A
相匹配。我还需要在可能的最小交换次数中执行此操作。数组可以包含重复的元素。
例如,如果
A = {3,8,5,8}
B = {8,8,3,5}
最低需要交换为2
,顺序为
swap(0, 2)
swap(0, 3)
我知道如何从here,or here之类的源中查找需要进行多少次交换,但是我找不到有关生成交换顺序所需的任何信息,以进行{ {1}}个匹配A
。我相信该解决方案涉及有向图和循环,但是我无法完全确定一种小于O(n ^ 2)时间的有效算法。