Biz dizi olduğunu varsayalım uzunluğu "süreci: dizideki bir konuma işaret işaretçilerle işaretçi atlama konuma için noktalarına işaretçi her işaretçi ayarlayacaktır".
Bu zorluğun amacı için bir işaretçi, dizinin bir elemanının (sıfır temelli) dizinidir; bu, dizideki her elemanın eşit veya daha büyük ve küçük olacağı anlamına gelir . Bu gösterim kullanılarak işlem şu şekilde formüle edilebilir:
for i = 0..(n-1) {
ps[i] = ps[ps[i]]
}
Bu, (bu zorluk için) işaretçilerin sırayla yerinde (yani ilk önce düşük endekslerde) güncellendiği anlamına gelir.
Örnek
Bir örnek üzerinde çalışalım, :
Böylece bir " işaretçi atlama " yinelemesinden sonra dizisini .
Meydan okuma
İndeksleri olan bir dizi göz önüne alındığında, dizi artık değişmeyene kadar yukarıda açıklanan işaretçi zıplamasını yineleyerek elde edilen dizi.
kurallar
Programınız / fonksiyonunuz aynı tip bir liste / vektör / dizi vb. Alır ve verir / verir.
- boş olmadığı garantilidir ve
- sadece girişleri içerdiği garanti edilir .
Çeşitler: seçebilirsiniz
- 1 tabanlı dizinlemeyi kullanmak veya
- Gerçek işaretçiler kullanmak,
bununla birlikte gönderiminizde bunu belirtmelisiniz.
Test durumları
[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
ek girdi olarak kabul etmemize izin var mı?
#[[#]]&~FixedPoint~#&
.