← Two Pointers

Two Sum Sorted

Easy
Python
def two_sum_sorted(numbers,target):
    l,r=0,len(numbers)-1
    while l<r:
        s=numbers[l]+numbers[r]
        if s==target: return [l+1,r+1]
        elif s<target: l+=1
        else: r-=1
Java
public int[] twoSum(int[] numbers,int target){
    int l=0,r=numbers.length-1;
    while(l<r){
        int s=numbers[l]+numbers[r];
        if(s==target) return new int[]{l+1,r+1};
        else if(s<target) l++;
        else r--;
    } return new int[]{};
}

Key Insight

Two-pointer on sorted array. Multi-assign vs two declarations.

Python → Java Differences

  • Multi-assign l,r=0,len-1
  • Python returns list Java int[]
  • Two-pointer identical
Python
def two_sum_sorted(numbers,target):
    l,r=0,len(numbers)-1
    while l<r:
        s=numbers[l]+numbers[r]
        if s==target: return [l+1,r+1]
        elif s<target: l+=1
        else: r-=1
Java
public int[] twoSum(int[] numbers,int target){
    int l=0,r=numbers.length-1;
    while(l<r){
        int s=numbers[l]+numbers[r];
        if(s==target) return new int[]{l+1,r+1};
        else if(s<target) l++;
        else r--;
    } return new int[]{};
}

Algorithm Steps

1. Left and right pointers
2. Sum small: move left
3. Sum large: move right