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 = 9Output:
[0,1]Explanation:
Because nums[0] + nums[1] == 9, we return [0, 1]
Example 2
Input:
nums = [3,2,4], target = 6Output:
[1,2]
Example 3
Input:
nums = [3,3], target = 6Output:
[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