题目
题目描述
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
输出描述:
对应每个测试案例,输出两个数,小的先输出。
思路
- 首先将数组中和为s的两个数放入list中。
- 为了解决出现多对数字的问题,创建一个只有一半list大小的数组,存放list相邻两个数字的乘积。
- 比较数组中数字的大小,然后将list清空,存入乘积最小的数即可。
代码
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> FindNumbersWithSum(int [] a,int sum) {
ArrayList<Integer> list = new ArrayList<Integer>();
int s = a.length;
for(int i = 0; i < s-1; i++){
for(int j = i +1; j<s;j++){
int c = a[i] + a[j];
if(c < sum){
continue;
}else if(c > sum){
break;
}else{
list.add(a[i]);
list.add(a[j]);
}
}
}
int l = list.size();
int[] b = new int[l/2];
if(l > 2){
for(int i = 0; i < list.size(); i+=2){
b[i/2] = list.get(i) * list.get(i+1);
}
int min = 0;
for(int i = 0; i < b.length; i++){
if(a[min] > a[i]){
min = i;
}
}
int t1 = list.get(min * 2);
int t2 = list.get(min * 2 + 1);
list.clear();
list.add(t1);
list.add(t2);
return list;
}else {
return list;
}
}
}