两数之和
题目描述
给一个整数数组,找到两个数使得他们的和等于一个给定的数 target。
你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标。注意这里下标的范围是 1 到 n,不是以 0 开头。
你可以假设只有一组答案。
样例
给出 numbers = [2, 7, 11, 15], target = 9, 返回 [1, 2].
方法一:两重循环
public int[] twoSum(int[] nums, int target) {
int result[]=new int[2];
for(int i=0;i<nums.length;i++){
for(int j=i+1;j<nums.length;j++){
if(nums[i]+nums[j]==target){
result[0]=i+1;
result[1]=j+1;
return result;
}
}
}
return result;
}
方法二: 使用HashMap
key : 遍历数组时,key保存数组每一位的值
value : 保存对应的数组下标
如果所需要的结果为 a, b ,那么 a+b=target ,所以b=target-a
在遍历时,只需要检查map中有没有 target-a
如果有 ,返回key a 对应的value 和 当前下标
没有则将该位的值和下标加入map中
public int[] twoSum(int[] nums, int target) {
//<value , index>
Map<Integer,Integer> map=new HashMap<Integer, Integer>();
int result[]=new int[2];
for (int i = 0; i < nums.length; i++) {
if (map.containsKey(target-nums[i])){
result[0]=map.get(target-nums[i])+1;
result[1]=i+1;
break;
}
else {
map.put(nums[i],i);
}
}
return result;
}