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

โปรแกรมค้นหาจำนวนอาร์เรย์ย่อยที่มีผลรวมคี่โดยใช้ Python


สมมติว่าเรามีอาร์เรย์ arr เราต้องหาจำนวนอาร์เรย์ย่อยที่มีผลรวมคี่ หากคำตอบมีขนาดใหญ่เกินไป ให้ส่งคืนผลลัพธ์ modulo 10^9+7

ดังนั้น ถ้าอินพุตเป็นเหมือน arr =[8,3,7] ผลลัพธ์จะเป็น 3 เพราะอาร์เรย์ย่อยทั้งหมดเป็น [[8],[3],[7],[8,3],[3, 7],[8,3,7]] ตอนนี้ค่าผลรวมของมันคือ [8,3,7,11,10,18] ดังนั้นจึงมีค่าผลรวมคี่สามค่า [3,7,11]

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

  • freq :=รายการที่มีสององค์ประกอบ 1 และ 0

  • ตอบ :=0

  • คำนำหน้า :=0

  • สำหรับแต่ละ x ใน arr ทำ

    • คำนำหน้า :=คำนำหน้า + x

    • ans :=ans + freq[1 XOR prefix AND 1]

    • freq[prefix AND 1] :=freq[prefix AND 1] + 1

  • ส่งคืน mod (10^9+7)

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

ตัวอย่าง

def solve(arr):
   freq = [1, 0]
   ans = prefix = 0
   for x in arr:
      prefix += x
      ans += freq[1 ^ prefix&1]
      freq[prefix &s; 1] += 1
   return ans % (10**9+7)
arr = [8,3,7]
print(solve(arr))

อินพุต

[8,3,7]

ผลลัพธ์

3