포인터가 배열의 특정 위치를 가리키는 길이 의 배열 가 있다고 가정 합니다. " 포인터 점프 " 프로세스는 포인터가 가리키는 위치에 모든 포인터를 설정합니다.
이 문제를 해결하기 위해 포인터는 배열 요소의 인덱스 (0부터 시작)이며 배열의 모든 요소는 보다 크거나 같고 보다 작습니다 . 이 표기법을 사용하여 다음과 같이 프로세스를 공식화 할 수 있습니다.
for i = 0..(n-1) {
ps[i] = ps[ps[i]]
}
이것은 (이 도전 과제에서) 포인터가 순차적으로 순서대로 업데이트된다는 것을 의미합니다 (즉, 먼저 낮은 지수).
예
예제를 살펴 보겠습니다 .
따라서 " 포인터 점프 "를 한 번 반복 하면 배열을 얻게 됩니다.
도전
인덱스 출력을 가진 배열이 주어지면 배열이 더 이상 변경되지 않을 때까지 위에서 설명한 포인터 점프를 반복하여 얻은 배열.
규칙
프로그램 / 함수는 동일한 유형, 목록 / 벡터 / 배열 등을 가져 와서 출력합니다.
- 비어 있지 않은 것으로 보장되고
- 항목 만 포함하도록 보장됩니다 .
변형 : 당신은 선택할 수 있습니다
- 1 기반 인덱싱을 사용하거나
- 실제 포인터를 사용하십시오.
그러나 당신은 당신의 제출에 이것을 언급해야합니다.
테스트 사례
[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]
n
를 추가 입력으로 사용할 수 있습니까?
#[[#]]&~FixedPoint~#&
.