ในความท้าทายนี้คุณจะต้องแบ่งพาร์ติชันรายการโดยที่พาร์ติชั่นมีขนาดสูงสุดขนาดขั้นต่ำและขนาดที่ต้องการ ฉันจะใช้สัญลักษณ์(min,pref,max)
เพื่อระบุขนาดในการท้าทายนี้
สำหรับผู้ที่ไม่คุ้นเคยกับการแบ่งพาร์ติชันรายการต่อไปนี้ได้รับการแบ่งพาร์ติชันออกเป็น 3 ส่วน:
[0..9] -> [[0,1,2],[3,4,5],[6,7,8]]
[0..10], (2,4,5) -> [[0,1,2,3],[4,5,6],[7,8,9]]
เมื่อรายการที่ไม่เท่ากันหารคุณต้องพาร์ทิชันที่จะใกล้เคียงกับขนาดที่ต้องการเป็นไปได้: การแบ่งพาร์ติชั่นนี้ทำได้ดีกว่า[[0,1,2,3],[4,5,6,7],[8,9]]
แม้ว่าจะมีความยาวที่ต้องการมากกว่าก็ตาม อย่างเป็นทางการเราต้องลดผลรวมของ(partitionLength-preferredSize)^2
แต่ละพาร์ติชันให้น้อยที่สุด
ลำดับของความยาวพาร์ติชั่นไม่สำคัญ: สำหรับไม่ว่า[0..5], (2,3,3)
จะเป็น[[0,1,2],[3,4]]
หรือใช้[[0,1],[2,3,4]]
งานได้ [0..7], (4,4,5) -> []
ถ้าพาร์ติชันไม่มีความเป็นไปได้กลับอาร์เรย์ที่ว่างเปล่า
คุณสามารถสันนิษฐานได้ว่า1<=min<=pref<=max
และอาร์เรย์ที่ส่งถึงคุณนั้นเป็นอาร์เรย์จำนวนเต็มที่ไม่ว่างเปล่า อาร์เรย์จะเป็นอาร์กิวเมนต์แรกเสมอ คุณสามารถยอมรับ min, max, และ pref ในลำดับใดก็ได้และเป็น tuple หรือเป็นอาร์กิวเมนต์ที่แยกกัน
โปรแกรมของคุณต้องทำงานภายในไม่กี่วินาที โดยทั่วไปไม่อนุญาตให้วนซ้ำทุกขนาดพาร์ติชันที่เป็นไปได้ภายในขอบเขต
กรณีทดสอบ:
[1], (1,3,4) -> [[1]]
[100], (1,2,3) -> [[100]]
[1,2], (1,1,2) -> [[1],[2]]
[1,2], (1,2,2) -> [[1,2]]
[1,2], (1,3,3) -> [[1,2]]
[1,2,3], (1,2,3) -> [[1,2],[3]] or [[1,2,3]]
[1,2,3,4], (1,3,4) -> [[1,2,3,4]]
[1,2,3,4,5], (3,3,4) -> []
[1,2,3,4,5], (2,2,2) -> []
[1,2,3,4,5], (3,3,5) -> [[1,2,3,4,5]]
[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49], (2,6,6) -> [[1,2,3,4,5,6],[7,8,9,10,11,12],[13,14,15,16,17,18],[19,20,21,22,23,24],[25,26,27,28,29],[30,31,32,33,34],[35,36,37,38,39],[40,41,42,43,44],[45,46,47,48,49]]
นี่คือรหัสกอล์ฟดังนั้นควรตั้งเป้าหมายให้น้อยที่สุดในภาษาที่คุณโปรดปราน!
[a..b]
รวมa
และไม่รวมb
ถูกต้องหรือไม่