मान लीजिए हमारे पास nums नामक एक सरणी और एक मान k है। एक संचालन में, हम nums से दो तत्व चुन सकते हैं जिनका योग k के बराबर हो और उन्हें सरणी से हटा सकते हैं। हमें सरणी पर किए जा सकने वाले अधिकतम संचालनों की संख्या ज्ञात करनी है।
इसलिए, यदि इनपुट है nums = [8,3,6,1,5] k = 9, तो आउटपुट 2 होगा क्योंकि हम [3,6] हटा सकते हैं जिनका योग 9 है, फिर [8,1] हटा सकते हैं जिनका योग भी 9 है।
इसे हल करने के लिए, हम निम्न चरणों का पालन करेंगे:
- counter := nums में मौजूद प्रत्येक आइटम की आवृत्ति वाला एक मैप
- res := 0
- counter में प्रत्येक num के लिए, करें
- यदि counter[k-num] शून्येतर है, तो
- यदि num, k - num के समान नहीं है, तो
- res := res + counter[num] और counter[k-num] का न्यूनतम
- counter[k-num] := 0
- counter[num] := 0
- अन्यथा,
- res := res + (counter[num] / 2) का भागफल
- यदि num, k - num के समान नहीं है, तो
- यदि counter[k-num] शून्येतर है, तो
- res वापस करें
उदाहरण
बेहतर समझ के लिए निम्न कार्यान्वयन देखें:
from collections import Counter
def solve(nums, k):
counter = Counter(nums)
res = 0
for num in counter:
if counter.get(k-num, 0):
if num != k - num:
res += min(counter[num], counter[k-num])
counter[k-num] = 0
counter[num] = 0
else:
res += int(counter[num] / 2)
return res
nums = [8,3,6,1,5]
k = 9
print(solve(nums, k))
इनपुट
[8,3,6,1,5], 9
आउटपुट
2