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
- nếu (A [i] giống k và my_map [k]> 1) hoặc (A [i] không giống k), thì
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