学习目标:
目标:熟练运用Java所学知识
学习内容:
本文内容:使用java解决 两数之和
题目描述
给出一个整数数组,请在数组中找出两个加起来等于目标值的数,
你给出的函数twoSum 需要返回这两个数字的下标(index1,index2),需要满足 index1 小于index2.。
注意:下标是从1开始的
假设给出的数组中只存在唯一解
例如:
给出的数组为 {20, 70, 110, 150},
目标值为90
输出 index1=1, index2=2
解题思路
这个题目最容易想到的就是暴力搜索了,但是暴力搜素太浪费时间,所以排除这种方法
这里讲一种比较高效的方法,就是使用HsahMap的方法,将元素作为key存入,将下标作为value存入,将求的和记作target
每次存之前将当前元素记作temp,判断 map中是否存在元素 target-temp
如果存在则将temp的下标和target的下标返回即可
实现代码
public int[] twoSum (int[] numbers, int target) {
// write code here
Map<Integer,Integer> map=new HashMap<>();//创建HashMap
for(int i=0;i<numbers.length;i++){
int temp=numbers[i];
//判断map中是否存在target-temp
if(map.containsKey(target-temp)){
//如果存在则返回对应下标 +1 因为题目要求下标是从1开始的
return new int[]{map.get(target-temp)+1,i+1};
}
map.put(temp,i);
}
return new int[]{};
}