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

Tìm tất cả các chỉ số tốt trong Mảng đã cho bằng Python

Giả sử chúng ta có một mảng A gồm các số, chúng ta phải tìm tất cả các chỉ số của mảng này để sau khi xóa phần tử thứ i khỏi mảng, mảng sẽ là một mảng tốt. Chúng tôi phải ghi nhớ rằng -

  • Mảng tốt là mảng có một phần tử bằng tổng của tất cả các phần tử khác.
  • Tính năng lập chỉ mục dựa trên 1 sẽ được sử dụng tại đây.

Vì vậy, nếu đầu vào là [10, 4, 6, 2], thì đầu ra sẽ là [1,4] vì khi chúng ta loại bỏ A [1], mảng sẽ giống như [4, 6, 2] và nó là tốt, vì 6 =4 + 2. Nếu chúng ta xóa A [4], mảng sẽ trông giống như [10, 4, 6] và nó cũng tốt, là 10 =4 + 6.

Để 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 A
  • thêm:=0
  • my_map:=một bản đồ mới
  • đối với tôi trong phạm vi từ 0 đến n, thực hiện
    • my_map [A ​​[i]]:=my_map [A ​​[i]] + 1
    • thêm:=thêm + A [i]
  • đối với tôi trong phạm vi từ 0 đến n, thực hiện
    • k:=thêm - A [i]
    • nếu k mod 2 giống 0, thì
      • k:=k / 2
      • nếu k trong my_map, thì
        • nếu (A [i] giống k và my_map [k]> 1) hoặc (A [i] không giống k), thì
          • hiển thị i + 1

Ví dụ

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

from collections import defaultdict
def find_indices(A):
   n = len(A)
   add = 0
   my_map = defaultdict(lambda:0)
   for i in range(n):
      my_map[A[i]] += 1
      add += A[i]
   for i in range(n):
      k = add - A[i]
      if k % 2 == 0:
         k = k >> 1
         if k in my_map:
            if ((A[i] == k and my_map[k] > 1) or (A[i] != k)):
               print((i + 1))
A = [10, 4, 6, 2]
find_indices(A)

Đầu vào

[10, 4, 6, 2]

Đầu ra

1
4