Write a function called twoSum
that takes an array of integers and a target integer as input and returns an array of indices of the two numbers that add up to the target.
/**
* Returns an array of indices of two numbers that add up to the target.
* @param {number[]} nums - The input array of integers.
* @param {number} target - The target sum.
* @returns {number[]} - An array of indices of the two numbers.
*/
function twoSum(nums: number[], target: number): number[]
console.log(twoSum([2, 7, 11, 15], 9));
// Output: [0, 1] (2 + 7 = 9)
console.log(twoSum([3, 2, 4], 6));
// Output: [1, 2] (2 + 4 = 6)
console.log(twoSum([3, 3], 6));
// Output: [0, 1] (3 + 3 = 6)
- Each input integer is unique.
- You can use a Set to keep track of numbers you've seen so far while iterating through the array.
Click to reveal solution
function twoSum(nums, target) {
const numSet = new Set();
for (let i = 0; i < nums.length; i++) {
const complement = target - nums[i];
if (numSet.has(complement)) {
return [nums.indexOf(complement), i];
}
numSet.add(nums[i]);
}
return [];
}
- Create a
Set
callednumSet
to store numbers that have been seen while iterating through the array. - Iterate through the input array
nums
. For each number, calculate its complement (the number needed to reach the target) astarget - nums[i]
. - If the complement is already in
numSet
, return an array containing the indices of the complement and the current number. - If the complement is not in
numSet
, add the current number to the set. - If no solution is found, return an empty array.
const twoSum = require('./twoSum');
describe('Two Sum', () => {
test('Test 1', () => {
const nums = [2, 7, 11, 15];
const target = 9;
const result = twoSum(nums, target);
expect(result).toEqual(expect.arrayContaining([0, 1]));
});
test('Test 2', () => {
const nums = [3, 2, 4];
const target = 6;
const result = twoSum(nums, target);
expect(result).toEqual(expect.arrayContaining([1, 2]));
});
test('Test 3', () => {
const nums = [3, 3];
const target = 6;
const result = twoSum(nums, target);
expect(result).toEqual(expect.arrayContaining([0, 1]));
});
});