พิจารณาการเปลี่ยนแปลงของจำนวนเต็ม1, ... n, เช่นนี้สำหรับn = 6:
[5,2,4,3,6,1]
ถ้าคุณดูการเปลี่ยนแปลงเช่นการทำแผนที่จาก[1,2,3,4,5,6]ไป[5,2,4,3,6,1], การเปลี่ยนแปลงสามารถ decomponsed เข้าไปเคลื่อนรอบ รอบเป็นส่วนย่อยขององค์ประกอบที่แมปกัน ยกตัวอย่างเช่น1ได้รับการแมปไป5ซึ่งได้รับการแมปไปซึ่งได้รับการแมปกลับไป6 ดังนั้นหนึ่งรอบเป็น1 [1,5,6]รอบอื่น ๆและ[2] [3,4]ดังนั้นจำนวนรอบ3สำหรับการเปลี่ยนแปลงนี้คือ
โดยทั่วไปรอบของการเปลี่ยนแปลงที่จะไม่ซ้ำกัน (ถึงการสั่งซื้อ) และจำนวนรอบสำหรับการเปลี่ยนแปลงของขนาดที่nแตกต่างกันจากการ1n
ความท้าทาย
รับการเปลี่ยนแปลงที่ไม่ว่างเปล่าส่งออกจำนวนรอบ
การป้อนข้อมูลเป็นอาร์เรย์ที่เกิดขึ้นจากnจำนวนเต็ม1, 2, ... , ที่n n > 0จำนวนเต็มแต่ละค่าเกิดขึ้นเพียงครั้งเดียว ลำดับที่ปรากฏจะกำหนดการเปลี่ยนลำดับตามตัวอย่างด้านบน
แทนที่จะเป็นอาร์เรย์คุณสามารถใช้รายการสตริงที่มีตัวคั่นระหว่างตัวเลขการป้อนข้อมูลแยกต่างหากสำหรับแต่ละหมายเลขหรืออะไรก็ได้ที่สมเหตุสมผล
สำหรับการเปลี่ยนแปลงของขนาดnแทนที่จะเป็น 1 ชุดตามของจำนวนเต็ม1, ... , nคุณสามารถอย่างต่อเนื่องใช้ชุด 0-based 0, ... n-1, ถ้าเป็นเช่นนั้นโปรดระบุไว้ในคำตอบของคุณ
รหัสควรใช้งานnได้สูงสุด20ในเวลาที่เหมาะสมพูดน้อยกว่าหนึ่งนาที
รหัสกอล์ฟ อนุญาตบิวอินได้ทั้งหมด
กรณีทดสอบ
สิ่งนี้จะถือว่าอินพุตแบบอิงอาร์เรย์ 1 ตัว
[1] -> 1
[3,2,1] -> 2
[2,3,4,5,1] -> 1
[5,2,4,3,6,1] -> 3
[8,6,4,5,2,1,7,3] -> 2
[4,5,11,12,7,1,3,9,10,6,8,2] -> 1
[4,2,5,11,12,7,1,3,9,10,6,8] -> 5
[5,8,6,18,16,9,14,10,11,12,4,20,15,19,2,17,1,13,7,3] -> 3
[14,5,17,15,10,18,1,3,4,13,11,16,2,12,9,7,20,6,19,8] -> 7
ที่เกี่ยวข้อง
ความท้าทายที่เกี่ยวข้องนี้จะถามถึงวงจรที่แท้จริงของการเปลี่ยนแปลงไม่ใช่จำนวนของการเปลี่ยนแปลง ต้องการเพียงจำนวนรอบเท่านั้นที่สามารถนำไปสู่อัลกอริธึมที่สั้นกว่าซึ่งก้าวเท้าเลี่ยงการสร้างรอบจริง
1... nในลำดับนั้น คุณช่วยให้ชัดเจนว่าการแมปเป็นอินพุตได้อย่างไร? มันเป็นโครงสร้างข้อมูลหรือไม่?
dictใช่มันเป็นโครงสร้างข้อมูลเช่นงูหลาม ฉันต้องการจะมี{1: 2, 2: 1}เป็น input [2, 1]แทน