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

โปรแกรมค้นหาจำนวนองค์ประกอบสามารถลบออกเพื่อให้องค์ประกอบคี่และดัชนีรวมเท่ากันในPython


สมมติว่าเรามีรายการหมายเลขที่เรียกว่า nums ตอนนี้ให้พิจารณาฟังก์ชันว่า f(i) ซึ่งลบองค์ประกอบที่ดัชนี i แล้วคืนค่าจริงหรือเท็จ ทั้งนี้ขึ้นอยู่กับผลรวมของค่าดัชนีคู่ในรายการผลลัพธ์จะเหมือนกับผลรวมของค่าดัชนีคี่หรือไม่ ดังนั้นเราจึงต้องการจำนวนดัชนีที่ f จะคืนค่าเป็นจริง

ดังนั้น ถ้าอินพุตเป็น nums =[6, 8, 5, 2, 3] ผลลัพธ์จะเป็น 2 เพราะถ้าเราลบ 8 อาร์เรย์จะเป็น [6, 5, 2, 3] คี่ และแม้แต่ผลรวมขององค์ประกอบดัชนีคือ 8 ดังนั้นจึงเหมือนกัน วิธีแก้ปัญหาที่เป็นไปได้อีกวิธีหนึ่งคือ หากเราลบ 2 อาร์เรย์จะเป็น [6, 8, 5, 3] ในที่นี้ผลรวมขององค์ประกอบที่จัดทำดัชนีและคี่คือ 11 ดังนั้นพวกมันจึงเหมือนกัน

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

  • n :=ขนาดของ nums
  • a :=รายการ 2d ของคำสั่ง 2 x (n+1) และเติมแต่ละรายการด้วย 0s
  • สำหรับแต่ละดัชนี i และค่า x nums ทำ
    • a[0, i + 1] :=a[0, i]
    • a[1, i + 1] :=a[1, i]
    • a[i mod 2, i + 1] :=a[i mod 2, i + 1] + x
  • ค :=0
  • s :=ผลรวมขององค์ประกอบทั้งหมดที่มีอยู่ใน nums
  • สำหรับฉันในช่วง 0 ถึง n - 1 ทำ
    • e :=a[0, i] - a[0, 0] + a[1, n] - a[1, i + 1]
    • ถ้า e * 2 เหมือนกับ s - nums[i] แล้ว
      • c :=c + 1
  • คืนค

ตัวอย่าง

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

def solve(nums):
   n = len(nums)
   a = [[0] * (n + 1), [0] * (n + 1)]
   for i, x in enumerate(nums):
      a[0][i + 1] = a[0][i]
      a[1][i + 1] = a[1][i]
      a[i % 2][i + 1] += x

   c = 0
   s = sum(nums)
   for i in range(n):
      e = a[0][i] - a[0][0] + a[1][n] - a[1][i + 1]
      if e * 2 == s - nums[i]:
         c += 1
   return c

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

อินพุต

[6, 8, 5, 2, 3]

ผลลัพธ์

2