मान लीजिए हमारे पास संख्याओं की एक सरणी A है। हमें इस सरणी के उन सभी सूचकांकों को ढूंढना है ताकि सरणी से iवें तत्व को हटाने के बाद, सरणी एक "अच्छी सरणी" बन जाए। ध्यान रखें कि:
- अच्छी सरणी वह सरणी है जिसमें एक तत्व अन्य सभी तत्वों के योग के बराबर होता है
- यहां 1-आधारित इंडेक्सिंग का उपयोग किया गया है
उदाहरण के लिए, यदि इनपुट [10, 4, 6, 2] है, तो आउटपुट [1,4] होगा क्योंकि जब हम A[1] हटाते हैं, तो सरणी [4, 6, 2] जैसी दिखेगी और यह अच्छी है क्योंकि 6 = 4+2। यदि हम A[4] हटाते हैं, तो सरणी [10, 4, 6] जैसी दिखेगी और यह भी अच्छी है क्योंकि 10 = 4+6।
समाधान दृष्टिकोण
इसे हल करने के लिए हम निम्नलिखित चरणों का पालन करेंगे:
- n := A का आकार
- add := 0
- my_map := एक नया मैप
- i के लिए 0 से n तक की रेंज में:
- my_map[A[i]] := my_map[A[i]] + 1
- add := add + A[i]
- i के लिए 0 से n तक की रेंज में:
- k := add - A[i]
- यदि k मॉड 2, 0 के समान है, तो:
- k := k/2
- यदि k, my_map में है, तो:
- यदि (A[i], k के समान है और my_map[k] > 1) या (A[i], k के समान नहीं है), तो i + 1 प्रदर्शित करें
उदाहरण कोड
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)
इनपुट
[10, 4, 6, 2]
आउटपुट
1 4