#### 题目描述:
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
#### 输出实例:
```txt
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
```
#### 思路:
按照题目的意思,将target拆分成两数之和,如target=a+b,则只要找到a和b两数在nums中的下标即可得到答案。这里用HashMap来实现,在查找过程中大大缩减了时间复杂度,但是在比较坏的情况下,HashMap要申请很多空间来存储键值对,所以该算法空间复杂度比较高。
#### 代码:
```java
public int[] twoSumWith(int[] nums, int target) {
//创建存放结果的数组
int[] indexs = new int[2];
// 创建存放目标值分解(如:target=key+value)结果的哈希表
HashMap<Integer,Integer> map = new HashMap<Integer,Integer>();
for(int i = 0; i < nums.length; i++){
if(map.containsKey(nums[i])){
indexs[0] = i;
indexs[1] = map.get(nums[i]);
return indexs;
}
// 将数据存入 key为target关于nums[i]的补数 ,value为下标i
map.put(target-nums[i],i);
}
return indexs;
}
}
```

两数之和(Two Sum)