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

โปรแกรมนับ Subarray ผลรวมเป็นเลขคี่ (Odd Sum) ด้วย Python

นับ subarray ที่ sum เป็นคี่ ใช้ prefix sum parity: เก็บ frequency ของ prefix sum parity (0=even, 1=odd) เริ่มต้น freq[0]=1 (empty prefix) สำหรับแต่ละ x: prefix += x, ans += freq[1 ^ (prefix&1)] (ต้องการ parity ตรงข้าม), freq[prefix&1]++ ผลลัพธ์ mod 1e9+7

ขั้นตอนการทำงาน

  1. freq = [1, 0] # freq[even], freq[odd]
  2. ans = 0, prefix = 0
  3. วนลูป x ใน arr: prefix += x
  4. ans += freq[1 ^ (prefix & 1)] # จำนวน prefix ก่อนหน้าที่ parity ตรงข้าม
  5. freq[prefix & 1] += 1
  6. คืน ans % (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 & 1] += 1
    return ans % (10**9 + 7)

arr = [8, 3, 7]
print(solve(arr))  # Output: 3

อินพุต/เอาต์พุต

Input: [8,3,7]
Output: 3

Subarrays: [8]=8(even), [3]=3(odd), [7]=7(odd), [8,3]=11(odd), [3,7]=10(even), [8,3,7]=18(even) -> 3 odd sums