สมมติว่าเรามีรายการตัวเลขที่เรียกว่า nums และค่าสองค่าคือ size และ k ทีนี้ สมมติว่ามีการดำเนินการที่เรานำรายการย่อยของขนาดความยาวที่ต่อเนื่องกัน และเพิ่มทุกองค์ประกอบทีละรายการ เราสามารถดำเนินการนี้ได้ k ครั้ง เราต้องหาค่าต่ำสุดที่เป็นไปได้สูงสุดในหน่วย nums
ดังนั้น หากอินพุตเป็น nums =[2, 5, 2, 2, 7], size =3, k =2 ผลลัพธ์จะเป็น 3 ตามที่เราสามารถเพิ่ม [2, 5, 2] ได้ [ 3, 6, 3, 2, 7] แล้วเพิ่มขึ้น [6, 3, 2] เพื่อให้ได้ [3, 7, 4, 3, 7] ขั้นต่ำคือ 3
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- กำหนดฟังก์ชั่นที่เป็นไปได้() นี้จะเป็นเป้าหมาย
- เหตุการณ์ :=รายการขนาด N และเติมด้วย 0
- ย้าย :=0, s :=0
- สำหรับผมในช่วง 0 ถึง N ให้ทำ
- s :=s + events[i]
- เดลต้า :=เป้าหมาย -(A[i] + s)
- ถ้าเดลต้า> 0 แล้ว
- ย้าย :=ย้าย + เดลต้า
- s :=s + เดลต้า
- ถ้า i + ขนาด
- เหตุการณ์[i + ขนาด] :=เหตุการณ์[i + ขนาด] - เดลต้า
- กลาง :=(ซ้าย + ขวา + 1) / 2
- ถ้าเป็นไปได้(กลาง) งั้น
- ซ้าย :=กลาง
- มิฉะนั้น
- ขวา :=กลาง - 1
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
class Solution: def solve(self, A, size, K): N = len(A) def possible(target): events = [0] * N moves = s = 0 for i in range(N): s += events[i] delta = target - (A[i] + s) if delta > 0: moves += delta s += delta if i + size < N: events[i + size] -= delta return moves <= K left, right = 0, 10 ** 10 while left < right: mid = (left + right + 1)//2 if possible(mid): left = mid else: right = mid - 1 return left ob = Solution() nums = [2, 5, 2, 2, 7] size = 3 k = 2 print(ob.solve(nums, size, k))
อินพุต
[2, 5, 2, 2, 7], 3, 2
ผลลัพธ์
3