有效地逆转Java中数组的排列

Han*_*mpf 0 java arrays algorithm map

好的,这是我的问题:

我在Java中实现一个算法,其中的一部分将遵循:问题是如何以有效的方式做我现在要解释的内容.

给定:长度为n的整数数组perm的数组a,这是[1..n]的排列

现在我想使用由数组perm确定的顺序来置换数组a,

即a = [a,b,c,d],perm = [2,3,4,1] ------> permutedA [b,c,d,a],

我想通过迭代数组来实现这一点:permutedA [i] = a [perm [i] -1],( - 1因为perm中的排列索引从1开始而不是0)

现在我想对permutedA做一些操作......

现在我想反过来进行置换操作.这是我不知道该怎么做的地方.注意a可以多次持有一个项目,即a = [a,a,a,a]

现在我认为使用Hashmap而不是perm数组会有所帮助.但我不确定这是否是最好的方法.

djn*_*jna 5

想你的意思

ShuffledA[i] = a[perm[i]-1]
Run Code Online (Sandbox Code Playgroud)

在你洗牌的时候你可以构建反向shuffle:

 inverseperm[perm[i]-1] = i + 1
Run Code Online (Sandbox Code Playgroud)

哪个构建

 inversePerm[4 1 2 3]
Run Code Online (Sandbox Code Playgroud)

然后你将现有的算法应用到[bcda],产生你的原始[abcd]