直接使用双指针,只是题目多加了一个限定,输出乘积最小的那一组。
public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) { int l = 0, r = array.length-1; ArrayList<Integer> res = new ArrayList<>(); int multiply = Integer.MAX_VALUE; while(l < r){ int value = array[l]+array[r]; if(value < sum) l++; else if(value > sum) r--; else { if(multiply > array[l]*array[r]){ multiply = array[l]*array[r]; res.clear(); res.add(array[l]); res.add(array[r]); } l++; r--; } } return res; }
最后发现,其实两数距离最远的那一组的乘积最小,所以可以修改为下面的代码
public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) { int l = 0, r = array.length-1; ArrayList<Integer> res = new ArrayList<>(); while(l < r){ int value = array[l]+array[r]; if(value < sum) l++; else if(value > sum) r--; else { res.add(array[l]); res.add(array[r]); return res; } } return res; }