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

โปรแกรมค้นหาความยาวของรายการย่อยที่ยาวที่สุดที่มีผลรวมเป็น 0 ใน Python


สมมติว่าเรามีรายการที่มีค่าเพียงสองค่าคือ 1 และ -1 เราต้องหาความยาวของรายการย่อยที่ยาวที่สุดที่มีผลรวมเป็น 0

ดังนั้น หากอินพุตเป็น nums =[1, 1, -1, 1, 1, -1, 1, -1, 1, −1] ผลลัพธ์จะเป็น 8 เนื่องจากรายการย่อยที่ยาวที่สุดคือ [-1 , 1, 1, -1, 1, -1, 1, −1] ซึ่งผลรวมเป็น 0

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

  • table :=แผนที่ใหม่เปล่า

  • cs :=0, max_diff :=0

  • สำหรับฉันในช่วง 0 ถึงขนาดของ nums − 1 ทำ

    • cs :=cs + nums[i]

    • ถ้า cs เหมือนกับ 0 แล้ว

      • max_diff :=สูงสุดของ i + 1 และ max_diff

    • ถ้า cs อยู่ในตารางแล้ว

      • max_diff :=สูงสุดของ max_diff และ (i - table[cs])

    • มิฉะนั้น

      • ตาราง[cs] :=ฉัน

  • คืนค่า max_diff

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

ตัวอย่าง

class Solution:
   def solve(self, nums):
      table = {}
      cs = 0
      max_diff = 0
      for i in range(len(nums)):
         cs += nums[i]
         if cs == 0:
            max_diff = max(i + 1, max_diff)
         if cs in table:
            max_diff = max(max_diff, i − table[cs])
         else:
            table[cs] = i
      return max_diff
ob = Solution()
nums = [1, 1, −1, 1, 1, −1, 1, −1, 1, −1]
print(ob.solve(nums))

อินพุต

[1, 1, −1, 1, 1, −1, 1, −1, 1, −1]

ผลลัพธ์

8