题目描述
输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
输出描述:
对应每个测试案例,输出两个数,小的先输出。
思路:从0遍历每一个数,另一个数在数组中进行查找,用二分法找,
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
ArrayList<Integer> list = new ArrayList<Integer>();
boolean tag = true;
int minResult = (int) (1.0f/0.0f);
int min = 0, max = 0;
for (int i=0; i<array.length; ++i) {
int k = sum - array[i];
int left=i-1, right = array.length;
while (right-left>1) {
int mid = (right+left)/2;
if (array[mid]>=k) {
right = mid;
} else {
left = mid;
}
}
if (array[right]==k) {
if (k*array[i]<minResult) {
tag = false;
minResult = k*array[i];
min = array[i];
max = k;
}
}
}
if (tag) {
return list;
}
list.add(min);
list.add(max);
return list;
}
}