Computer >> Máy Tính >  >> Lập trình >> Python

Chương trình tìm số phần tử có thể bị xóa để làm cho tổng các phần tử được lập chỉ mục lẻ và chẵn bằng nhau trong Python

Giả sử chúng ta có một danh sách các số được gọi là nums. Bây giờ hãy xem xét một hàm nói f (i) xóa phần tử ở chỉ mục i và sau đó trả về true hoặc false, tùy thuộc vào tổng giá trị chỉ số chẵn của danh sách kết quả có giống với tổng các giá trị chỉ số lẻ hay không. Vì vậy, chúng ta cần số lượng chỉ mục mà f sẽ trả về true.

Vì vậy, nếu đầu vào là nums =[6, 8, 5, 2, 3], thì đầu ra sẽ là 2 becuase, nếu chúng ta loại bỏ 8, mảng sẽ là [6, 5, 2, 3], là số lẻ và tổng các phần tử chỉ số chẵn là 8, vì vậy chúng giống nhau. Một giải pháp khả thi khác là, nếu chúng ta loại bỏ 2, mảng sẽ là [6, 8, 5, 3], ở đây tổng các phần tử được lập chỉ mục lẻ và chẵn là 11, vì vậy chúng giống nhau.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • n:=kích thước của nums
  • a:=danh sách 2d có thứ tự 2 x (n + 1) và điền vào mỗi chữ số 0
  • đối với mỗi chỉ số i và giá trị x nums, thực hiện
    • 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
  • c:=0
  • s:=tổng của tất cả các phần tử có trong nums
  • đối với tôi trong phạm vi từ 0 đến n - 1, thực hiện
    • e:=a [0, i] - a [0, 0] + a [1, n] - a [1, i + 1]
    • nếu e * 2 giống với s - nums [i], thì
      • c:=c + 1
  • trả lại c

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

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))

Đầu vào

[6, 8, 5, 2, 3]

Đầu ra

2