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

โปรแกรมค้นหาผลรวมที่ใหญ่ที่สุดของ 3 รายการย่อยที่ไม่ทับซ้อนกันของผลรวมเดียวกันใน Python


สมมติว่าเรามีรายการตัวเลขที่เรียกว่า nums และอีกค่าหนึ่งคือ k เราต้องหาผลรวมที่ใหญ่ที่สุดของรายการย่อยที่ไม่ทับซ้อนกันสามรายการของรายการขนาด k ที่กำหนด

ดังนั้น หากอินพุตเป็น nums =[2, 2, 2, -6, 4, 4, 4, -8, 3, 3, 3] k =3 ผลลัพธ์จะเป็น 27 ตามที่เราเลือกได้ รายการย่อย [2, 2, 2], [4, 4, 4] และ [3, 3, 3] รวมเป็น 27.

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • P :=[0]
  • สำหรับแต่ละ x ใน A ทำ
    • ใส่ P[-1] + x ที่ส่วนท้ายของ P
  • Q :=[P[i + K] - P[i] for i ในช่วง 0 ถึงขนาด P - K]
  • คำนำหน้า :=Q[จากดัชนี 0 ถึงจุดสิ้นสุด]
  • คำต่อท้าย :=Q[จากดัชนี 0 ถึงจุดสิ้นสุด]
  • สำหรับ i ในช่วง 0 ถึงขนาด Q - 1 ทำ
    • คำนำหน้า[i + 1] :=สูงสุดของคำนำหน้า[i + 1] คำนำหน้า[i]
    • ส่วนต่อท้าย[~(i + 1) ] :=สูงสุดของคำต่อท้าย[~(i + 1) ], คำต่อท้าย[~i]
  • ret =(Q[i] + prefix[i - K] + suffix[i + K]) สำหรับแต่ละ i ในช่วง K ถึงขนาดของ Q - K - 1
  • ผลตอบแทนสูงสุดของ ret

ตัวอย่าง (Python)

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

class Solution:
   def solve(self, A, K):
      P = [0]
      for x in A:
         P.append(P[-1] + x)
      Q = [P[i + K] - P[i] for i in range(len(P) - K)]
      prefix = Q[:]
      suffix = Q[:]
      for i in range(len(Q) - 1):
         prefix[i + 1] = max(prefix[i + 1], prefix[i])
         suffix[~(i + 1)] = max(suffix[~(i + 1)], suffix[~i])
      return max(Q[i] + prefix[i - K] + suffix[i + K] for i in range(K, len(Q) - K))
ob = Solution()
nums = [2, 2, 2, -6, 4, 4, 4, -8, 3, 3, 3]
k = 3
print(ob.solve(nums, k))

อินพุต

[2, 2, 2, -6, 4, 4, 4, -8, 3, 3, 3], 3

ผลลัพธ์

27