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

โปรแกรมค้นหาผลรวมสัมบูรณ์สูงสุดของอาร์เรย์ย่อยใดๆ ใน Python


สมมติว่าเรามีอาร์เรย์ที่เรียกว่า nums เราต้องหาผลรวมสัมบูรณ์ของอาร์เรย์ย่อย [nums_l, nums_l+1, ..., nums_r-1, nums_r] คือ |nums_l + nums_l+1 + ... + nums_r-1 + nums_r| เราต้องหาผลรวมสัมบูรณ์สูงสุดของอาร์เรย์ย่อยของ nums ใดๆ (อาร์เรย์ย่อยนั้นอาจว่างเปล่าได้)

ดังนั้น ถ้าอินพุตเท่ากับ nums =[2,-4,-3,2,-6] เอาต์พุตจะเป็น 11 เนื่องจากอาร์เรย์ย่อย [2,-4,-3,2] มีผลรวมของ subarray สัมบูรณ์สูงสุด | 2 + (-4) + (-3) + 2| =11.

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

  • n:=ขนาดของ nums

  • ตอบ:=0, อุณหภูมิ:=0

  • สำหรับฉันอยู่ในช่วง 0 ถึง n - 1 ทำ

    • ถ้าอุณหภูมิ <0 แล้ว

      • อุณหภูมิ:=0

    • temp:=temp + nums[i]

    • ans:=สูงสุดของ ans และ |temp|

  • อุณหภูมิ:=0

  • สำหรับฉันอยู่ในช่วง 0 ถึง n - 1 ทำ

    • ถ้าอุณหภูมิ> 0 แล้ว

      • อุณหภูมิ:=0

    • temp:=temp + nums[i]

    • ans:=สูงสุดของ ans และ |temp|

  • กลับมาอีกครั้ง

ตัวอย่าง

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

def solve(nums):
   n=len(nums)
   ans=0
   temp=0

   for i in range(n):
      if (temp<0):
         temp=0
   temp=temp+nums[i]
   ans=max(ans,abs(temp))

   temp=0
   for i in range(n):
      if (temp>0):
         temp=0
      temp=temp+nums[i]
      ans=max(ans,abs(temp))

   return ans

nums = [2,-4,-3,2,-6]
print(solve(nums))

อินพุต

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

ผลลัพธ์

11