题目
大致思路
- 暴力法:直接双层遍历判断是否符合相邻两数之和与target相等。
- HashMap法:HashMap存入所有的数组值和对应的数组索引,再次遍历进行判断map中是否包含所求的目标元素。
代码实现
class Solution {
public int[] twoSum(int[] nums, int target) {
/*方法一:暴力法
//新建长度为2的数组res存放返回结果
int[] res = new int[2];
//双层循环直接暴力即可
for(int i =0;i<nums.length-1;i++){
for(int j = i+1;j<nums.length;j++){
if(nums[i] + nums[j] == target){
res[0] = i;
res[1] = j;
}
}
}
return res;
*/
//方法二:使用HashMap进行查找即可,避免了遍历
Map<Integer,Integer> map = new HashMap<>();
int[] res = new int[2];
//先将所有的nums的数值和索引均存入map
for(int i =0;i<nums.length;i++){
map.put(nums[i],i);
}
//遍历寻找其中的符合条件的索引即可。
for(int j = 0;j<nums.length;j++){
int cpm = target - nums[j];
if(map.containsKey(cpm) && map.get(cpm) != j){
res[0] = j;res[1] = map.get(cpm);
}
}
return res;
}
}