题目描述:
给定排序数组arr,目标值target,寻找数组中所有和为target的数的组合,返回对应的索引。
题目没有说等于target的数对是否唯一,如果唯一,就是leetcode 167https://blog.csdn.net/orangefly0214/article/details/89155613
然而我也没有主动和面试官沟通题目,是否唯一,是否有重复的数,自己随手写了个数组{1,2,3,4,5},target=7,这样的话,满足条件的就有2对了,
所以题目变形为:
给定排序数组arr,目标值target,寻找数组中所有和为target的数的组合。(数组中和为target的数对不唯一,且数组中没有重复的元素。)
此时的解法:
排序数组,想到的就是二分查找,所以预设两个指针,从两边向中间扫描,每扫描到一对,打印,
public class twoSumComba {
public static void main(String[] args) {
int[] a = {1,2,3,4,5};
int m = 7;
find(a,m);
}
private static void find(int[] a, int m) {
int start = 0;
int end = a.length-1;
while(start<end) {
if(a[start]+a[end] == m) {
System.out.println(start+","+end);
start++;
end--;
} else if(a[start]+a[end] > m) {
end--;
} else if(a[start]+a[end] < m) {
start++;
}
}
}
}