有人请解释这个例子及其答案。我理解一个数组是否有{3,2,6},那么它的反函数将是{6,2,3}。这是被问到的,因为下面的代码片段似乎没有实现这个目标吗?
假设数组int pi [128]包含数字0,1,......,127的排列。
您将使用哪一行或两行Java代码来有效地生成逆代码 pi在阵列ip [128]?
答案:
for (i=0; i<128; ++i)
ip[pi[i]] = i
答案 0 :(得分:2)
不知道你在哪里看到了答案,因为这是错误的。
为了说明,我们使用大小为4的数组
使用ip = {1,2,3,0}
,结果为pi = {0,1,2,3}
或ip = {0,1,2,3}
成为for (int i = 0; i < 128; ++i)
ip[i] = pi[127 - i];
不知道“逆”这个词的定义,那些将是正确的结果。
正确答案是:
public JSONObject[] jsonToArray()
答案 1 :(得分:2)
答案是错误的(甚至不编译)。
ip
数组将包含每个数字的索引,而不是“逆”。
在排列排序的情况下,结果数组将与输入相同:
int[] pi = {0, 1, 2, 3, 4};
int[] ip = new int[5];
for (int i = 0; i < 5; ++i)
ip[pi[i]] = i;
System.out.println(Arrays.toString(ip));
输出:
[0, 1, 2, 3, 4]
无论“逆”是什么意思,我打赌它并不意味着“相同”。你的例子强烈暗示它意味着“逆转”,“答案”显然不会产生。
根据你的问题,恕我直言,你的教授缺乏知识,经验,并不是抽屉里最锋利的刀。我的建议是尽快找到另一位老师。
答案 2 :(得分:1)
跟进@Andreas的回答。您只需复制数组即可得到答案。我不知道如何调用它&#34;反转&#34;数组。我创建了一些根据问题设置数组的样本(使用更少的元素)并打印结果。
import java.util.Arrays;
public class HelloWorld{
public static void main(String []args){
int arrayLength = 10;
int[] pi= new int[arrayLength];
int[] ip = new int[arrayLength];
int i =0;
for (i=0; i<arrayLength; ++i)
pi[i] = i;
for (i=0; i<arrayLength; ++i)
ip[pi[(arrayLength-1)-i]] = i;
System.out.println("pi: "+Arrays.toString(pi));
System.out.println("ip: "+Arrays.toString(ip));
}
}
pi:[0,1,2,3,4,5,6,7,8,9] ip:[9,8,7,6,5,4,3,2,1,0]
import java.util.Arrays;
public class HelloWorld{
public static void main(String []args){
int arrayLength = 10;
int[] pi= new int[arrayLength];
int[] ip = new int[arrayLength];
int i =0;
for (i=0; i<arrayLength; ++i)
pi[i] = i;
for (i=0; i<arrayLength; ++i)
ip[pi[i]] = i;
System.out.println("pi: "+Arrays.toString(pi));
System.out.println("ip: "+Arrays.toString(ip));
}
}
pi:[0,1,2,3,4,5,6,7,8,9] ip:[0,1,2,3,4,5,6,7,8,9]
答案 3 :(得分:1)
这是排列$ \ pi $的“逆置换”,在任何数学家都会使用的意义上。 http://mathworld.wolfram.com/InversePermutation.html
答案 4 :(得分:0)
逆置换是一种置换,您可以通过将元素的位置插入数组中元素值指定的位置来获得。