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

โปรแกรมหาผลรวมของ subarray สูงสุดหลังการดำเนินการใน Python


สมมติว่าเราได้รับอาร์เรย์ที่มีตัวเลขจำนวนเต็ม เราสามารถดำเนินการที่เราสามารถแทนที่ค่าของ array[i] ด้วยค่ากำลังสองของมัน หรือ array[i] * array[i] อนุญาตให้ดำเนินการประเภทนี้ได้เพียงครั้งเดียว และเราต้องส่งคืนผลรวมของอาร์เรย์ย่อยสูงสุดที่เป็นไปได้หลังการดำเนินการ ต้องระบุอาร์เรย์ย่อย

ดังนั้น หากอินพุตเป็นอาร์เรย์ =[4, 1, -2, -1] เอาต์พุตจะเป็น 17

หากเราแทนที่ค่าในอาร์เรย์[0] ด้วยค่ากำลังสอง อาร์เรย์จะกลายเป็น [16, 1, -2, -1] อาร์เรย์ย่อยสูงสุดที่เป็นไปได้จากนี้คือ [16, 1] และมีค่ารวมสูงสุด 16 + 1 =17

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

  • dp1 :=รายการใหม่ที่มีค่าลบอนันต์
  • dp2 :=รายการใหม่ที่มีค่าลบอนันต์
  • สำหรับแต่ละ num ในอาร์เรย์ ทำ
    • แทรกสูงสุดของ ((องค์ประกอบสุดท้ายของ dp1 + num), num) ที่ส่วนท้ายของ dp1
    • แทรกสูงสุดของ ((องค์ประกอบสุดท้ายที่สองของ dp1 + num^2), num^2, (องค์ประกอบสุดท้ายของ dp2 + num)) ที่ส่วนท้ายของ dp2
  • คืนค่าองค์ประกอบสูงสุดของ dp2

ตัวอย่าง

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

def solve(array):
   dp1 = [float('-inf')]
   dp2 = [float('-inf')]
   for num in array:
      dp1.append(max(dp1[-1] + num, num))
      dp2.append(max(dp1[-2] + num**2, num**2, dp2[-1]+num))
   return max(dp2)

print(solve([4, 1, -2, -1]))

อินพุต

[4, 1, -2, -1]

ผลลัพธ์

17