1.题目描述
一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
输出描述:
- 对应每个测试案例,输出两个数,小的先输出。
2.解题思路
将数组的数值依次放入list里面,每次放入之前查询list里面是否有(sum-array[i]),如果有,再判断两数乘积是否比之前存的两数乘积小,如果判断成功,则将这两个数放到index1和index2中。最后将这两个index放到list里面返回。
3.代码
import java.util.*;
public class Solution {
public ArrayList<Integer> FindNumbersWithSum(int [] array, int sum) {
ArrayList<Integer> res = new ArrayList<>();
ArrayList<Integer> ss = new ArrayList<>();
int Min_ = Integer.MAX_VALUE;
//index1用于存放比较小的那个数
int index1 = 0;
//index2用于存放比较大的数
int index2 = 0;
for(int i = 0;i<array.length;i++){
if(res.contains(sum-array[i])){
if(Min_>(sum-array[i])*array[i]){
Min_ = (sum-array[i])*array[i];
index1 = array[i]<(sum-array[i])? array[i]:(sum-array[i]);
index2 = sum-index1;
}
}else{
res.add(array[i]);
}
}
if(index1!=0||index2!=0){
ss.add(index1);
ss.add(index2);
}
return ss;
}
}