# 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:

输入:[20,70,110,150],90
返回值: [1,2]
说明:20+70=90  
1
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
最后更新时间: 1/9/2023, 2:54:47 PM