假设我们有一个长度为n的数组ps,其中的指针指向该数组中的某个位置:“ 指针跳跃 ”过程将把每个指针都设置为其指向的指针所指向的位置。n
出于此挑战的目的,指针是数组元素的(从零开始)索引,这意味着数组中的每个元素都将大于或等于0且小于n。使用此表示法,可以将过程表述为:
for i = 0..(n-1) {
ps[i] = ps[ps[i]]
}
这意味着(针对此挑战),指针将按顺序进行就地更新(即,先降低索引)。
例
让我们来看一个例子,ps = [2,1,4,1,3,2]:
i = 0:the element at position ps[0] = 2 points to 4→ps = [4,1,4,1,3,2]i = 1:the element at position ps[1] = 1 points to 1→ps = [4,1,4,1,3,2]i = 2:the element at position ps[2] = 4 points to 3→ps = [4,1,3,1,3,2]i = 3:the element at position ps[3] = 1 points to 1→ps = [4,1,3,1,3,2]i = 4:the element at position ps[4] = 3 points to 1→ps = [4,1,3,1,1,2]i = 5:the element at position ps[5] = 2 points to 3→ps = [4,1,3,1,1,3]
因此,在“ 指针跳跃 ” 迭代之后,我们得到数组[4,1,3,1,1,3]。[4,1,3,1,1,3]
挑战
给定具有索引的数组,则输出通过迭代上述指针跳转获得的数组,直到该数组不再更改为止。
规则
您的程序/函数将采用并返回/输出相同的类型,列表/向量/数组等。
- 保证是非空的
- 是保证仅包含条目0≤p<n。
变体:您可以选择
但是,您应该在提交的内容中提及这一点。
测试用例
[0] → [0]
[1,0] → [0,0]
[1,2,3,4,0] → [2,2,2,2,2]
[0,1,1,1,0,3] → [0,1,1,1,0,1]
[4,1,3,0,3,2] → [3,1,3,3,3,3]
[5,1,2,0,4,5,6] → [5,1,2,5,4,5,6]
[9,9,9,2,5,4,4,5,8,1,0,0] → [1,1,1,1,4,4,4,4,8,1,1,1]