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
Target | Numbers | Result | Time | Memory |
---|---|---|---|---|
9 | [2,7,11,15] | [0,1] | 15μs | 432B |
6 | [3,2,4] | [1,2] | 15μs | 432B |
6 | [3,3] | [0,1] | 17μs | 432B |
0 | [8, 18, 36, 15, -3, 27, 3] | [4,6] | 17μs | 432B |
-9 | [-6, 13, -2, 15, -3, 27, -3] | [0,4] | 18μs | 592B |
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