class TwoPointerFinder:
def __init__(self, arr):
self.arr = arr
def find_pair_with_sum(self, target):
left, right = 0, len(self.arr) - 1
while left < right:
current_sum = self.arr[left] + self.arr[right]
if current_sum == target:
return (self.arr[left], self.arr[right])
elif current_sum < target:
left += 1 # move left pointer right to increase sum
else:
right -= 1 # move right pointer left to decrease sum
return None
# Driver code
arr = [1, 2, 3, 4, 5]
target = 6
finder = TwoPointerFinder(arr)
pair = finder.find_pair_with_sum(target)
if pair:
print(f"{pair[0]} -> {pair[1]} -> null")
else:
print("No pair found")left, right = 0, len(self.arr) - 1
initialize two pointers at array ends
current_sum = self.arr[left] + self.arr[right]
calculate sum of values at pointers
if current_sum == target:
check if sum matches target
return (self.arr[left], self.arr[right])
return the found pair
elif current_sum < target:
if sum too small, move left pointer right to increase sum
left += 1 # move left pointer right to increase sum
advance left pointer
if sum too big, move right pointer left to decrease sum
right -= 1 # move right pointer left to decrease sum
advance right pointer