# NC61 两数之和
TIP
标签:数组、哈希
# 题目描述:
给出一个整型数组 numbers 和一个目标值 target,请在数组中找出两个加起来等于目标值的数的下标,返回的下标按升序排列。 (注:返回的数组下标从1开始算起,保证target一定可以由数组里面2个数字相加得到)
示例1:
输入:[3,2,4], 6
返回值:[2,3]
说明:
因为 2+4=6 ,而 2的下标为2 , 4的下标为3 ,又因为 下标2 < 下标3 ,所以返回[2,3]
1
2
3
4
2
3
4
示例2:
输入:[20,70,110,150],90
返回值: [1,2]
说明:20+70=90
1
2
3
2
3
# 算法思路:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* @param numbers int整型一维数组
* @param target int整型
* @return int整型一维数组
*/
export function twoSum(numbers: number[], target: number): number[] {
let res: number[] = [];
let map = new Map<number, number>();
for (let i = 0; i < numbers.length; i++) {
// 循环数组,将数组中的元素 按照元素索引的组合来处理
map.set(numbers[i], i);
}
// 做完映射之后,再次遍历数组
for (let j = 0; j < numbers.length; j++) {
let another = target - numbers[j];
if (map.has(another) && map.get(another) !== j) {
res.push(j + 1);
res.push(map.get(another) + 1);
break;
}
}
// 返回最终的结果
return res;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29