题目:输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
思考:i,j分别指向数组收尾,题目要求成绩最小, 根据数学基础知识知道两个数相差越大,他们的乘积就越小。
代码如下
import java.util.ArrayList;
/*
* 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,
* 如果有多对数字的和等于S,输出两个数的乘积最小的
*/
public class FindNumbersWithSum1 {
public static ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
ArrayList<Integer> list=new ArrayList<Integer>();
int i=0;
int j=array.length-1;
while(i<j){
if(array[i]+array[j]==sum){
list.add(array[i]);
list.add(array[j]);
break;
}
if(array[i]+array[j]>sum){
j--;
}
if(array[i]+array[j]<sum){
i++;
}
}
return list;
}
public static void main(String[] args) {
int [] a={5,6,7,8,9,10,11,12,13};
ArrayList<Integer> list =FindNumbersWithSum(a,13);
for (int i:list){
System.out.println(i);
}
}
}