मान लीजिए हमारे पास संख्याओं का एक ऐरे और एक संख्या k है। हमें यह जांचना है कि क्या दिया गया ऐरे ऐसे जोड़ों में विभाजित किया जा सकता है कि प्रत्येक जोड़ी का योग k हो।
उदाहरण के लिए, यदि इनपुट arr = [1, 2, 3, 4, 5, 6], k = 7 है, तो आउटपुट True होगा क्योंकि हम (2, 5), (1, 6) और (3, 4) जैसे जोड़े बना सकते हैं।
समाधान दृष्टिकोण
चूंकि ऐरे पहले से सॉर्टेड है, हम दो पॉइंटर्स का उपयोग करते हैं - एक शुरुआत से (low) और एक अंत से (high)। यदि योग k से कम है, तो low बढ़ाएं; यदि अधिक है, तो high घटाएं; यदि बराबर है, तो दोनों को अंदर की ओर ले जाएं।
एल्गोरिदम चरण:
n = len(arr)- यदि
nविषम है, तो False लौटाएं low = 0,high = n - 1- जब
low < high: - यदि
arr[low] + arr[high] != k, तो False लौटाएं low += 1,high -= 1- True लौटाएं
पायथन कार्यान्वयन
def solve(arr, k):
n = len(arr)
if n % 2 == 1:
return False
low = 0
high = n - 1
while low < high:
if arr[low] + arr[high] != k:
return False
low += 1
high -= 1
return True
arr = [1, 2, 3, 4, 5, 6]
k = 7
print(solve(arr, k)) # True
इनपुट
[1, 2, 3, 4, 5, 6], 7
आउटपुट
True
व्याख्या:
सॉर्टेड ऐरे [1, 2, 3, 4, 5, 6]:
- low=0 (1), high=5 (6): 1+6=7 ✓
- low=1 (2), high=4 (5): 2+5=7 ✓
- low=2 (3), high=3 (4): 3+4=7 ✓
सभी जोड़ों का योग 7 है।
महत्वपूर्ण:
यह एल्गोरिदम केवल तभी काम करता है जब ऐरे पहले से सॉर्टेड हो। अनसॉर्टेड ऐरे के लिए पहले सॉर्ट करें या हैश-मैप आधारित दृष्टिकोण का उपयोग करें।