方法一:HASH表,和数组一一样
class Solution {
public int[] twoSum(int[] numbers, int target) {
HashMap<Integer,Integer> hash = new HashMap<>();
int[] ans;
ans = new int[2]; //定义答案数组
for(int i = 0;i < numbers.length;i++){
if(hash.containsKey(target- numbers[i])){ //hash方法,确认和numbers[i]和为target的数字是否存在
ans[0] = hash.get(target- numbers[i])+1; // 题目要求是1开始的数组
ans[1] = i+1;
break;
}
hash.put(numbers[i], i);
}
return ans;
}
}
方法2:双指针
class Solution {
public int[] twoSum(int[] numbers, int target) { // 方法二:双指针
int[] ans ={-1,-1};
int i=0;
int j = numbers.length - 1; //定义首尾指针
while(i != j){ //跳出循环的条件
if(numbers[i] + numbers[j] > target){ //如果和大于target,后面的指针往前走
j--;
}else if(numbers[i] + numbers[j] <target){ //反之,前面的指针往后走;
i++;
}
else{
ans[0] = i+1;
ans[1] = j+1;
return ans;
}
}
return ans;
}
}