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

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

สมมติว่าเรามีรายการที่ประกอบด้วยค่าเพียงสองค่าคือ 1 และ -1 เราต้องการหาความยาวของรายการย่อย (sublist) ที่มีผลรวมเท่ากับ 0

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

ขั้นตอนการแก้ปัญหา

  • สร้างตารางแฮช (hash map) ว่างชื่อ table
  • กำหนด cs = 0 (prefix sum) และ max_diff = 0
  • วนลูป i ตั้งแต่ 0 ถึงขนาดของ nums - 1:
    • อัปเดต cs := cs + nums[i]
    • ถ้า cs == 0 ให้ max_diff := max(i + 1, max_diff)
    • ถ้า cs อยู่ใน table แล้ว ให้ max_diff := max(max_diff, i - table[cs])
    • มิฉะนั้น ให้บันทึก table[cs] := i
  • คืนค่า 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