题目描述
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
解题思路
- 两个指针分别指向头和尾
- 如果当前和小于目标值,则头指针++;
- 如果当前和大于目标值,则尾指针–;
- 如果当前和等于目标值,则更新最小和,并把数字存入结果集合中。
- 清空ArrayList的方法是clear。
- 因为不知道最小和是正数还是负数,所以最小和的初始值只能设为最大的int。
代码
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
ArrayList<Integer> res = new ArrayList<Integer>();
if(array == null || array.length == 0) return res;
int low = 0, high = array.length - 1, product = 2147483647;
while(low < high){
if(array[low] + array[high] < sum){
low++;
} else if(array[low] + array[high] > sum){
high--;
} else {
if(product > (array[low] * array[high])){
product = array[low] * array[high];
res.clear();
res.add(array[low]);
res.add(array[high]);
}
low++;
high--;
}
}
return res;
}
}
来源:CSDN
作者:一直积累鸭
链接:https://blog.csdn.net/u010659877/article/details/103835044