题目
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
示例
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
解析
利用hash表,有锤子找钉子,既然是两数相加 a + b = c,有c了,那遍历过程中也有第一项a了,判断 c - a 是否存在,存在返回,不存在记录 key = a、val = index 后继续,直到等待扫描到 b, c - b = a。
GO解答
func twoSum(nums []int, target int) []int {
m := map[int]int{}
for i, v := range nums {
if k, ok := m[target - v]; ok {
return []int{i, k}
}
m[v] = i
}
return []int{}
}
PHP解答
function twoSum($nums, $target) {
$arr = [];
foreach ($nums as $index => $num) {
if (isset($arr[$target - $num])) {
return [$index, $arr[$target - $num]];
}
$arr[$num] = $index;
}
return [];
}