2 Pointer Target Sum - codepath/compsci_guides GitHub Wiki
Unit 4 Session 1 (Click for link to problem statements)
U-nderstand
Understand what the interviewer is asking for by using test cases and questions about the problem.
- What do we do if there are multiple pairs that could work but we only need one?
- Since the problem guarantees exactly one solution, this situation will not occur.
- What if the list has negative numbers?
- The approach still works as the list is sorted, allowing the two-pointer technique to be effective regardless of the sign of the numbers.
P-lan
Plan the solution with appropriate visualizations and pseudocode.
General Idea: Use two pointers to find two numbers that add up to the target by adjusting their positions based on the sum comparison to the target.
1) Initialize two pointers: `left` at the start of the list and `right` at the end.
2) While the `left` pointer is less than the `right` pointer:
a) Calculate the `current_sum` of the numbers at the two pointers.
b) If `current_sum` equals `target`, return the indices `[left, right]`.
c) If `current_sum` is less than `target`, increment the `left` pointer to try a larger sum.
d) If `current_sum` is greater than `target`, decrement the `right` pointer to try a smaller sum.
3) Since the problem guarantees a solution, the loop will always return before it terminates.
⚠️ Common Mistakes
- Forgetting to move the pointers correctly based on the comparison results could lead to infinite loops or missing the correct answer.
I-mplement
def two_sum(nums, target):
left = 0
right = len(nums) - 1
while left < right:
current_sum = nums[left] + nums[right]
if current_sum == target:
return [left, right]
elif current_sum < target:
left += 1 # Need a larger sum
else:
right -= 1 # Need a smaller sum