สมมติว่าเรามีอาเรย์ของความยาวพร้อมพอยน์เตอร์ที่ชี้ไปยังตำแหน่งบางอย่างในอาเรย์: กระบวนการของ " การกระโดดตัวชี้ " จะตั้งค่าตัวชี้ทุกตำแหน่งที่ตัวชี้ไปยังจุด
สำหรับวัตถุประสงค์ของการท้าทายนี้เป็นตัวชี้เป็น (zero-based) ดัชนีขององค์ประกอบของอาร์เรย์นี้แสดงให้เห็นว่าองค์ประกอบในอาร์เรย์ทุกคนจะมีค่ามากกว่าหรือเท่ากับและน้อยกว่าn การใช้สัญกรณ์นี้สามารถกำหนดสูตรได้ดังนี้:
for i = 0..(n-1) {
ps[i] = ps[ps[i]]
}
ซึ่งหมายความว่า (สำหรับการท้าทายนี้) ที่พอยน์เตอร์ได้รับการอัปเดตในลำดับตามลำดับ (เช่น. ดัชนีที่ต่ำกว่าก่อน)
ตัวอย่าง
ลองทำตัวอย่าง :
ดังนั้นหลังจากที่หนึ่งในการทำซ้ำของ " ตัวชี้กระโดด " เราได้รับอาร์เรย์{[4,1,3,1,1,3]}
ท้าทาย
รับอาร์เรย์ที่มีดัชนีเอาท์พุทอาร์เรย์ที่ได้รับจากการวนซ้ำตัวชี้ที่อธิบายไว้ข้างต้นการกระโดดจนกว่าอาร์เรย์จะไม่เปลี่ยนอีกต่อไป
กฎระเบียบ
โปรแกรม / ฟังก์ชั่นของคุณจะรับและส่งคืน / ส่งออกชนิดเดียวกันรายการ / เวกเตอร์ / อาร์เรย์เป็นต้น
- รับประกันว่าจะไม่ว่างเปล่าและ
- รับประกันได้ว่าจะมีเพียงรายการ<n
พันธุ์:คุณอาจเลือก
- เพื่อใช้การจัดทำดัชนีแบบ 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~#&
จะมีวิธีการแก้ปัญหา