Drill

ProblemsTypeScript › patterns

The two readings that add up

mediumpatternsTwo pointersArraysTypeScript

A reconciliation tool has a sorted column of amounts and a difference to explain. It looks for the two amounts that together account for it.

pairSummingTo(amounts: list<int>, target: int) → list<int>

Solve it in the editor →

Where you start

function pairSummingTo(amounts: number[], target: number): number[] {
  
}

Worked examples

CallResult
pairSummingTo([1,2,4,7,11], 9)[2,7]
pairSummingTo([1,2,3,4], 5)[1,4]
pairSummingTo([1,2,3], 100)[]
pairSummingTo([], 3)[]

Hint

Sorted input means you can start at both ends. If the two ends add up to too much, the right end is too big; if too little, the left end is too small.

Reference solution in TypeScript
function pairSummingTo(amounts: number[], target: number): number[] {
  let i = 0;
  let j = amounts.length - 1;
  while (i < j) {
    const sum = amounts[i] + amounts[j];
    if (sum === target) return [amounts[i], amounts[j]];
    if (sum < target) i += 1;
    else j -= 1;
  }
  return [];
}

The same problem in another language

More patterns problems in TypeScript