मान लीजिए हमारे पास nums नामक संख्याओं की सूची है। हमें उन इंडेक्स जोड़ियों i, j की संख्या ढूंढनी है, जहां i < j ऐसा हो कि nums[i] + nums[j] कुछ 0 >= k के लिए 2^k के बराबर हो।
तो, यदि इनपुट nums = [1, 2, 6, 3, 5] है, तो आउटपुट 3 होगा, क्योंकि तीन जोड़ियों का योग ऐसा है जैसे (6, 2): योग 8 है, (5, 3): योग 8 है और (1, 3) योग 4 है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे:
res := 0
c := प्रत्येक एलिमेंट की फ्रीक्वेंसी वाला मैप जो nums में मौजूद है
nums में प्रत्येक x के लिए, करें
0 से 31 तक रेंज में प्रत्येक j के लिए, करें
res := res + c[(2^j) - x]
c[x] := c[x] + 1
res लौटाएं
उदाहरण
बेहतर समझ के लिए निम्न कार्यान्वयन देखें
from collections import Counter
def solve(nums):
res, c = 0, Counter()
for x in nums:
for j in range(32):
res += c[(1 << j) - x]
c[x] += 1
return res
nums = [1, 2, 6, 3, 5]
print(solve(nums))
इनपुट
[1, 2, 6, 3, 5]
आउटपुट
3