两数之和
描述
给出一个整数数组,请在数组中找出两个加起来等于目标值的数,
你给出的函数twoSum 需要返回这两个数字的下标(index1,index2),需要满足 index1 小于index2.。注意:下标是从1开始的
假设给出的数组中只存在唯一解
例如:
给出的数组为 {20, 70, 110, 150},目标值为90
输出 index1=1, index2=2
解题
Solution1
/**
* 数组中两数之和
* 循环遍历
*/
public class Solution {
public int[] twoSum (int[] numbers,int target){
if (numbers==null) return null;
int[] res= new int[2];
for (int i = 0; i < numbers.length-1; i++) {
for (int j = i+1; j < numbers.length; j++) {
if (numbers[i]+numbers[j]==target){
res[0]= i+1;
res[1]= j+1;
return res;
}
}
}
return null;
}
}
Solution2
/**
* 数组中两数之和
* 哈希表
*/
import java.util.HashMap;
import java.util.Map;
public class Solution2 {
public int[] twoSum (int[] numbers,int target){
Map<Integer,Integer> map = new HashMap<>();//创建Map
for (int i = 0; i < numbers.length; i++) {
if (map.containsKey(target-numbers[i])){
return new int[]{map.get(target-numbers[i]),i+1};//Map中是否存在,存在则返回数组
}
map.put(numbers[i],i+1);//存储已遍历元素
}
return null;
}
}