1.简述:

描述

给出一个整型数组 numbers 和一个目标值 target,请在数组中找出两个加起来等于目标值的数的下标,返回的下标按升序排列。

(注:返回的数组下标从1开始算起,保证target一定可以由数组里面2个数字相加得到)

数据范围:#yyds干货盘点# 面试必刷TOP101:两数之和_代码实现#yyds干货盘点# 面试必刷TOP101:两数之和_数组_02#yyds干货盘点# 面试必刷TOP101:两数之和_数组_03

要求:空间复杂度 #yyds干货盘点# 面试必刷TOP101:两数之和_i++_04,时间复杂度 #yyds干货盘点# 面试必刷TOP101:两数之和_i++_05

示例1

输入:

[3,2,4],6

返回值:

[2,3]

说明:

因为 2+4=6 ,而 2的下标为2 , 4的下标为3 ,又因为 下标2 < 下标3 ,所以返回[2,3]
示例2

输入:

[20,70,110,150],90

返回值:

[1,2]

说明:

20+70=90

2.代码实现:

import java.util.*;
public class Solution {
public int[] twoSum (int[] numbers, int target) {
int[] res = new int[0];
//创建哈希表,两元组分别表示值、下标
HashMap<Integer, Integer> hash = new HashMap<Integer, Integer>();
//在哈希表中查找target-numbers[i]
for(int i = 0; i < numbers.length; i++){
int temp = target - numbers[i];
//若是没找到,将此信息计入哈希表
if(!hash.containsKey(temp))
hash.put(numbers[i], i);
//否则返回两个下标+1
else
return new int[] {hash.get(temp) + 1, i + 1};
}
return res;
}
}