สมมติว่าเรามีรายการความสูงของหอคอย และค่าบวก k เราต้องการเลือก k ทาวเวอร์ และทำให้สูงเท่ากันโดยเพิ่มอิฐมากขึ้น แต่ใช้อิฐให้น้อยที่สุด เราต้องหาจำนวนอิฐขั้นต่ำที่จำเป็นในการเลือก k ทาวเวอร์ และทำให้สูงเท่ากัน
ดังนั้นหากอินพุตเท่ากับความสูง =[4, 7, 31, 14, 40] k =3 แล้วผลลัพธ์จะเป็น 17 เนื่องจากเราสามารถเลือก 5, 8 และ 15 ซึ่งต้องใช้อิฐ 17 ก้อนเพื่อให้ได้ความสูงเท่ากัน .
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- จัดเรียงความสูงของรายการ
- แทน :=อินฟินิตี้
- s :=0
- สำหรับแต่ละดัชนี i และค่า x ในความสูง ทำ
- s :=s + x
- ถ้าฉัน>=k แล้ว
- s :=s - ความสูง[i - k]
- ถ้าฉัน>=k - 1 แล้ว
- ans :=ขั้นต่ำของ ans และ (x * k - s)
- คืนสินค้า
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
class Solution: def solve(self, heights, k): heights.sort() ans = float("inf") s = 0 for i, x in enumerate(heights): s += x if i >= k: s -= heights[i - k] if i >= k - 1: ans = min(ans, x * k - s) return ans ob = Solution() heights = [5, 8, 32, 15, 41] k = 3 print(ob.solve(heights, k))
อินพุต
[5, 8, 32, 15, 41], 3
ผลลัพธ์
17