ท้าทาย
รับอาร์เรย์ของจำนวนเต็มที่ไม่ว่างเปล่าเช่น:
[5, 2, 7, 6, 4, 1, 3]
ก่อนอื่นให้แบ่งเป็นอาร์เรย์โดยที่ไม่มีรายการใดใหญ่ไปกว่าอาร์เรย์ก่อนหน้า (เช่นอาร์เรย์ที่ไม่ได้เรียงจากน้อยไปมาก)
[5, 2] [7, 6, 4, 1] [3]
ถัดไปย้อนกลับแต่ละอาร์เรย์:
[2, 5] [1, 4, 6, 7] [3]
สุดท้ายเชื่อมพวกมันเข้าด้วยกัน:
[2, 5, 1, 4, 6, 7, 3]
นี่คือสิ่งที่โปรแกรมของคุณส่งออก / ฟังก์ชั่นกลับมา ทำซ้ำขั้นตอนนี้เพียงพอเวลาและอาร์เรย์จะเรียงลำดับอย่างสมบูรณ์
กฎระเบียบ
- อินพุตและเอาต์พุตอาจได้รับผ่านวิธีการมาตรฐานและอาจอยู่ในรูปแบบอาเรย์ที่เหมาะสม
- อาร์เรย์อินพุตจะไม่ว่างเปล่า แต่อาจมีเชิงลบและ / หรือซ้ำกัน
- ค่าสัมบูรณ์ของแต่ละจำนวนเต็มจะเป็นน้อยกว่า 2 วันที่ 31
กรณีทดสอบ
หวังว่าสิ่งเหล่านี้จะครอบคลุมกรณีขอบทั้งหมด:
[1] -> [1]
[1, 1] -> [1, 1]
[1, 2] -> [1, 2]
[2, 1] -> [1, 2]
[2, 3, 1] -> [2, 1, 3]
[2, 1, 3] -> [1, 2, 3]
[2, 1, 2] -> [1, 2, 2]
[2, 1, 1] -> [1, 1, 2]
[3, 1, 1, 2] -> [1, 1, 3, 2]
[3, 2, 1, 2] -> [1, 2, 3, 2]
[3, 1, 2, 2] -> [1, 3, 2, 2]
[1, 3, 2, 2] -> [1, 2, 2, 3]
[1, 0, 5, -234] -> [0, 1, -234, 5]
[1, 0, 1, 0, 1] -> [0, 1, 0, 1, 1]
[1, 2, 3, 4, 5] -> [1, 2, 3, 4, 5]
[5, 4, 3, 2, 1] -> [1, 2, 3, 4, 5]
[2, 1, 5, 4, 3] -> [1, 2, 3, 4, 5]
[2, 3, 1, 5, 4] -> [2, 1, 3, 4, 5]
[5, 1, 4, 2, 3] -> [1, 5, 2, 4, 3]
[5, 2, 7, 6, 4, 1, 3] -> [2, 5, 1, 4, 6, 7, 3]
[-5, -2, -7, -6, -4, -1, -3] -> [-5, -7, -2, -6, -4, -3, -1]
[14, 5, 3, 8, 15, 7, 4, 19, 12, 0, 2, 18, 6, 11, 13, 1, 17, 16, 10, 9] -> [3, 5, 14, 8, 4, 7, 15, 0, 12, 19, 2, 6, 18, 11, 1, 13, 9, 10, 16, 17]
เกณฑ์การให้คะแนน
นี่คือโค้ดกอล์ฟดังนั้นโค้ดที่สั้นที่สุดในหน่วยไบต์ชนะ
O(n^2)
O(n)
และเป็น สลับองค์ประกอบแรกและสุดท้ายจากนั้นสลับองค์ประกอบที่สองและสุดท้าย ฯลฯ เมื่อคุณไปที่จุดศูนย์กลาง
O(n)
แต่การย้อนกลับสามารถสร้างลงในอัลกอริทึมได้ (นั่นคือสิ่งที่คำตอบ JS ของฉันทำ) O(n)
เนื่องจากแต่ละซ้ำลูปมากกว่าแต่ละรายการในอาร์เรย์ครั้งย้ำเดียว (ฉันคิดว่า ... )