题目描述
Given an array of integers, return indices of the two numbers such that they add up to a specific target.
You may assume that each input would have exactly one solution, and you may not use the same element twice.
Example:
Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].
给一个数组和一个目标数字,
要求返回数组中加和=目标数字的两个元素的下标,以数组形式输出(要求一个元素只能使用一次)
解题思路
根据数组元素值之间的某种关系,最终返回数组元素的下标,有点键值对的意思,
所以考虑用HashMap来存储数组元素。
实现代码
根据上述思路可得Java代码:.
public int[] twoSum(int[] nums, int target) {
HashMap<Integer,Integer> map=new HashMap<>();
for(int i=0;i<nums.length;i++){
map.put(nums[i],i); //根据元素值,要得到索引值。HashMap只能根据key得到value,所以value是i
}
int[] index=new int[2]; //index数组存放符合条件的索引值
for(int i=0;i<nums.length;i++){
int t=target-nums[i]; //nums[i]是其中一个数,t是另一个(此时并不知道nums数组中是否存在t)
if(map.containsKey(t) && map.get(t)!=i){ //若数组中存在t,且t和nums[i]不是同一个元素,就符合条件了
index[0]=i;
index[1]=map.get(t);
}
}
return index;
}