输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
ArrayList<Integer> list = new ArrayList<Integer>();
if (array.length < 2){
return list;
}
// 已知是递增数组,在求和判断的时候,i指向数组的最前面,j指向数组的最后一位,两个的和大于sum时,j--,继续判断,当小于sum时,i++即可
int i=0, j = array.length - 1;
int min = j * (j-1);
while(i < j) {
if (array[i] + array[j] < sum){
i++;
} else if (array[i] + array[j] > sum) {
j--;
} else {
if (i * j < min && list.size() > 0){
min = i * j;
list.set(0,array[i]);
list.set(1,array[j]);
} else if (i * j < min){
min = i * j;
list.add(array[i]);
list.add(array[j]);
}
i++; j--;
}
}
return list;
}
}