Use two pointers starting at left (0) and right (N-1). If sum < target, increment left pointer; if sum > target, decrement right pointer.
class Solution:
def twoSum(self, numbers: list[int], target: int) -> list[int]:
l, r = 0, len(numbers) - 1
while l < r:
cur_sum = numbers[l] + numbers[r]
if cur_sum > target: r -= 1
elif cur_sum < target: l += 1
else: return [l + 1, r + 1]
return []
class Solution {
public int[] twoSum(int[] numbers, int target) {
int l = 0, r = numbers.length - 1;
while (l < r) {
int sum = numbers[l] + numbers[r];
if (sum > target) r--;
else if (sum < target) l++;
else return new int[]{l + 1, r + 1};
}
return new int[]{};
}
}