题目:
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
题目分析:
找到数组中任意两个和为target的元素的索引位
解题思路:
以空间换时间,采用HashMap记录已经遍历过的值以及对应的索引位,遍历过程中在HashMap的Key中查找是否具有target - nums[i],有的话则返回i与对应key的value。
整体来看题目难度较低,代码实现也比较容易。
代码如下
class Solution {
public int[] twoSum(int[] nums, int target) {
HashMap<Integer,Integer> hashmap = new HashMap<>();
for(int i = 0;i<nums.length;i++){
int tmp = target - nums[i];
if(hashmap.containsKey(tmp)){
return new int[]{hashmap.get(tmp),i}; /*找到了则返回一个new int[]*/
}
else{
hashmap.put(nums[i],i); /*如果还没有这个key值,则放入hashmap中*/
}
}
throw new IllegalArgumentException("No two sum solution");
}
}