直接使用双指针,只是题目多加了一个限定,输出乘积最小的那一组。
public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
int l = 0, r = array.length-1;
ArrayList<Integer> res = new ArrayList<>();
int multiply = Integer.MAX_VALUE;
while(l < r){
int value = array[l]+array[r];
if(value < sum)
l++;
else if(value > sum)
r--;
else {
if(multiply > array[l]*array[r]){
multiply = array[l]*array[r];
res.clear();
res.add(array[l]);
res.add(array[r]);
}
l++;
r--;
}
}
return res;
} 最后发现,其实两数距离最远的那一组的乘积最小,所以可以修改为下面的代码
public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
int l = 0, r = array.length-1;
ArrayList<Integer> res = new ArrayList<>();
while(l < r){
int value = array[l]+array[r];
if(value < sum)
l++;
else if(value > sum)
r--;
else {
res.add(array[l]);
res.add(array[r]);
return res;
}
}
return res;
}

京公网安备 11010502036488号