พิจารณาการเปลี่ยนแปลงของจำนวนเต็ม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
แตกต่างกันจากการ1
n
ความท้าทาย
รับการเปลี่ยนแปลงที่ไม่ว่างเปล่าส่งออกจำนวนรอบ
การป้อนข้อมูลเป็นอาร์เรย์ที่เกิดขึ้นจาก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]
แทน