Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมเพิ่มค่าต่ำสุดให้มากที่สุดหลังเพิ่ม K ซับลิสต์ใน Python

สมมติว่าเรามีรายการ nums และค่า size, k มีการดำเนินการ: เลือกซับลิสต์ติดกันยาว size เพิ่มทุกตัว 1 สามารถทำได้ k ครั้ง หาค่าต่ำสุดที่มากที่สุดได้ใน nums

ตัวอย่าง: nums = [2, 5, 2, 2, 7], size = 3, k = 2 ผลลัพธ์ 3

ขั้นตอนการแก้ปัญหา (Binary Search + Difference Array)

  1. ฟังก์ชัน possible(target):
    • events = [0] * N, moves = s = 0
    • วนลูป i จาก 0 ถึง N-1:
      • s += events[i]
      • delta = target - (A[i] + s)
      • ถ้า delta > 0:
        • moves += delta, s += delta
        • ถ้า i + size < N: events[i + size] -= delta
    • คืนค่า moves <= K
  2. จากเมธอดหลัก:
    • N = len(A), left = 0, right = 10^10
    • Binary Search: while left < right:
      • mid = (left + right + 1) // 2
      • ถ้า possible(mid): left = mid
      • อื่นๆ: right = mid - 1
    • คืนค่า left

ตัวอย่างโค้ด Python

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))  # Output: 3

อินพุต / เอาต์พุต

Input: [2, 5, 2, 2, 7], 3, 2

Output: 3