2
แบ่งพาร์ติชั่นรายการ!
ในความท้าทายนี้คุณจะต้องแบ่งพาร์ติชันรายการโดยที่พาร์ติชั่นมีขนาดสูงสุดขนาดขั้นต่ำและขนาดที่ต้องการ ฉันจะใช้สัญลักษณ์(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) -> …