import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> FindNumbersWithSum(int [] array, int sum) {
ArrayList<Integer> result = new ArrayList<>();
long multyp = 999999999;
int l = 0, r = array.length - 1;
while (l < r) {
if (array[l] + array[r] == sum) {
if (array[l] * array[r] < multyp) {
// 判断是否为最小乘积,如果是则重置返回结果值
multyp = array[l] * array[r];
result.clear();
result.add(array[l]);
result.add(array[r]);
}
l++;
r--;
} else if (array[l] + array[r] > sum) {
r--;
} else {
l++;
}
}
return result;
}
}
解题思想:
* 方式一:暴力遍历:直接遍历每两个数,查看其和是否符合等于 sum ,再计算其乘积,是否⼩于之前的乘积,如果⼩于,则更新。
* 方式二:hashset:针对每⼀个数字 a ,都查看 hashset 中是否存在 sum-a ,同时把该数字添加到 set中。如果存在则计算其乘积,更新乘积最⼩值。
* 方式三:双指针,小于则左指针++ ,大于则右指针--,否则判断是否最小乘积进行结果值重置。

京公网安备 11010502036488号