和为S的两个数字
和为S的两个数字
https://www.nowcoder.com/practice/390da4f7a00f44bea7c2f3d19491311b?tpId=13&&tqId=11195&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking
直接使用双指针,只是题目多加了一个限定,输出乘积最小的那一组。
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; }
剑指offer 文章被收录于专栏
为刷过的每一道题都书写一篇题解,便于重复练习~