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

โปรแกรมเพื่อเพิ่มค่าต่ำสุดหลังจากเพิ่มรายการย่อย K ใน Python


สมมติว่าเรามีรายการตัวเลขที่เรียกว่า 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 + ขนาด] - เดลต้า
  • คืนค่าจริงเมื่อเคลื่อนที่ <=K
  • จากวิธีหลัก ให้ทำดังนี้
  • N :=ขนาด A
  • ซ้าย :=0, ขวา :=10^10
  • ขณะซ้าย <ขวา ทำ
    • กลาง :=(ซ้าย + ขวา + 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