Original text

Description

Given an array of integers nums and an integer target, return indices of the two numbers such that they add up to target.

You may assume that each input would have exactly one solution, and you may not use the same element twice.

You can return the answer in any order.

Example 1

Input: nums = [2,7,11,15], target = 9

Output: [0,1]

Explanation: Because nums[0] + nums[1] == 9, we return [0, 1]

Example 2

Input: nums = [3,2,4], target = 6

Output: [1,2]

Example 3

Input: nums = [3,3], target = 6

Output: [0,1]

Constraints

  • 2 <= nums.length <= 10⁴
  • -10⁹ <= nums[i] <= 10⁹
  • -10⁹ <= target <= 10⁹
  • Only one valid answer exists
  • Algorithm complexity: less than O(N²)

Solution (PHP 8.2)

/**
 * @param int[] $numbers
 * @param int $target
 *
 * @return int[]
 *
 * @throws \Exception
 */
function getAddendIndexList(array $numbers, int $target): array
{
    $indexes = [];
    foreach ($numbers as $index => $number) {
        $difference = $target - $number;
        if (\array_key_exists($difference, $indexes)) {
            return [$indexes[$difference], $index];
        }

        $indexes[$number] = $index;
    }

    throw new \Exception('No addend numbers found');
}

Tests

TargetNumbersResultTimeMemory
9[2,7,11,15][0,1]15μs432B
6[3,2,4][1,2]15μs432B
6[3,3][0,1]17μs432B
0[8, 18, 36, 15, -3, 27, 3][4,6]17μs432B
-9[-6, 13, -2, 15, -3, 27, -3][0,4]18μs592B
OS: Ubuntu WSL2 (5.15.146.1-microsoft-standard-WSL2)
CPU: AMD Ryzen 7 5800X
RAM: 16GB
PHP 8.2.17 (cli) (built: Mar 16 2024 08:41:44) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.17, Copyright (c) Zend Technologies
    with Zend OPcache v8.2.17, Copyright (c), by Zend Technologies
    with Xdebug v3.3.1, Copyright (c) 2002-2023, by Derick Rethans
memory_limit => -1
xdebug.mode => profile