两数之和总结:
1、数组本身有序,用双指针(两边向中间夹)
2、数组无序(要求返回下标),则不适合先排序再双指针夹逼,而是用 HashMap 保存目标值。
public int[] twoSum(int[] numbers, int target) {
//两数之和总结:1、数组本身有序,用双指针(两边向中间夹)2、数组无序(要求返回下标),则不适合先排序再双指针夹逼,而是用 HashMap 保存目标值。
int[] result=new int[2];
//双指针法
int left=0,right=numbers.length-1;
while(true){
int sum=numbers[left]+numbers[right];
if(sum==target){
result[0]=left+1;
result[1]=right+1;
return result;
}
if(sum<target){
left++;
}else{
right--;
}
}
//return result;
/*
//可以用 hashMap 保存期待值这种做法的,但是这里用例有问题
Map<Integer,Integer> map=new HashMap<>();
for(int i=0;i<numbers.length;i++){
if(map.containsKey(numbers[i])){
result[0]=map.get(numbers[i])+1;
result[1]=i+1;
return result;
}else map.put(target-numbers[i],i);
}
return result;
*/
}