题目
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
思路
因为数组是有序的,所以可以用双指针,指向数组的首尾,具体步骤如下:
1.初始化:指针i指向数组首, 指针j指向数组尾部 i=leftIndex,j=rightIndex
2. 如果arr[i] + arr[j] == sum , 说明是可能解
3. 否则如果arr[i] + arr[j] > sum, 说明和太大,所以–j
4. 否则如果arr[i] + arr[j] < sum, 说明和太小,所以++i
代码
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
ArrayList<Integer> arrayList = new ArrayList<>(2);
if (array.length <= 0){
return arrayList;
}
int leftIndex = 0;
int rightIndex = array.length - 1;
while (leftIndex < rightIndex){
if ((array[leftIndex] + array[rightIndex]) == sum){
arrayList.add(array[leftIndex]);
arrayList.add(array[rightIndex]);
break;
}else if ((array[leftIndex] + array[rightIndex]) > sum){
rightIndex--;
}else {
leftIndex++;
}
}
return arrayList;
}
}