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

โปรแกรมหาจำนวนวิธีทำให้อาร์เรย์ fair ใน Python

ปัญหา

อาร์เรย์ nums ลบสมาชิก 1 ตำแหน่งได้ อาร์เรย์ fair ถ้าผลรวมตำแหน่งคู่ = ผลรวมตำแหน่งคี่ (หลังลบ) หาจำนวนตำแหน่งที่ลบได้เพื่อให้ fair

ตัวอย่าง

nums=[5,3,7,2] → ผลลัพธ์ 1 (ลบ index 1 ได้ [5,7,2] ผลรวมคู่ 5+2=7, คี่ 7 → fair)

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

  1. res=0, sm1=0, sm2=0 (sm1 ผลรวม index คี่, sm2 index คู่ เริ่มจาก 1)
  2. คำนวณ sm1, sm2 สำหรับ i=1..n-1
  3. ถ้า sm1 == sm2: res += 1 (ลบ index 0)
  4. วน i 1..n-1:
    • ถ้า i คี่: sm1 = sm1 - nums[i] + nums[i-1]
    • มิฉะนั้น: sm2 = sm2 - nums[i] + nums[i-1]
    • ถ้า sm1 == sm2: res += 1
  5. คืน res

การนำไปใช้งาน (Python)

def solve(nums):
    res, sm1, sm2 = 0, 0, 0
    for i in range(1, len(nums)):
        if i % 2 == 1:
            sm1 += nums[i]
        else:
            sm2 += nums[i]
    if sm1 == sm2:
        res += 1
    for i in range(1, len(nums)):
        if i % 2 == 1:
            sm1 = sm1 - nums[i] + nums[i-1]
        else:
            sm2 = sm2 - nums[i] + nums[i-1]
        if sm1 == sm2:
            res += 1
    return res

nums = [5,3,7,2]
print(solve(nums))

อินพุต

[5,3,7,2]

เอาต์พุต

1