给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
思路:两数的和已知,可以遍历数组,计算target减去数组元素的值,将它作为key,遍历到的数组元素下标作为value存到map中,下一次循环通过containsKey来查map中是否有可以和当前元素相加等于target的key,如果有的话取出value,这样一来就能取到两个下标了。
代码:
package code;
import java.util.HashMap;
import java.util.Hashtable;
public class demo01 {
public int[] towSum(int[] nums,int target){
HashMap<Integer, Integer> hashMap = new HashMap<>();
if(nums != null && nums.length>0){
for (int i=0;i<nums.length;i++){
//必须先判断map中是否存在和当前数组元素值相同的key,避免target和当前元素的差值等于当前元素,会返回类似[0,0]这样的错误结果
if (hashMap.containsKey(nums[i])){
Integer index = hashMap.get(nums[i]);
int[] indexArr = {index,i};//考虑顺序的话 先存index再存当前元素的下标
return indexArr;
}
hashMap.put(target-nums[i],i);//target和当前元素的差值为key,下标为value,存入map
}
}
return null;
}
}