题目描述
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
AC代码
思路虽然很简单,但是需要注意的地方有很多。
继续努力。
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
if(array == null && array.length <= 1) return null;
ArrayList<Integer> resList = new ArrayList<>();
int product = Integer.MAX_VALUE; // 1
int low = 0;
int high = array.length - 1;
Integer num1 = null; //2
Integer num2 = null; //2
while(low < high){
if(array[low] + array[high] == sum){
if(array[low] * array[high] < product){
num1 = array[low];
num2 = array[high];
product = num1 * num2;
}
low++; //3
high--; //3
}
else if(array[low] + array[high] < sum) low++;
else high--;
}
if(num1 != null && num2 != null){ //4
resList.add(num1);
resList.add(num2);
}
return resList;
}
}