题目描述
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的…
解析思路
此题思路较简单,因为是求两数之和,所以从前后开始同时检索。
遇到的第一组即为所求。
因为是前后同时向中间检索,所以第一组的两个数差距最大。
在高中数学里面我们可以知道,A+B≥(AB)/2。当AB相等时AB最大,所以当AB差距最大时,A*B最小。
运行代码
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
ArrayList<Integer> list = new ArrayList<>();
int length = array.length;
if(length < 2 || array == null){
return list;
}
int i = 0,j = length - 1;
while(j > i){
if(array[i] + array[j] == sum){
list.add(array[i]);
list.add(array[j]);
return list;
}
if(array[i] + array[j] < sum){
i++;
}else{
j--;
}
}
return list;
}
}