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数组会有所帮助.但我不确定这是否是最好的方法.
想你的意思
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]