输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
数列满足递增,设两个头尾两个指针i和j,
若ai + aj == sum,就是答案(相差越远乘积越小)
若ai + aj > sum,aj肯定不是答案之一(前面已得出 i 前面的数已是不可能),j -= 1
若ai + aj < sum,ai肯定不是答案之一(前面已得出 j 后面的数已是不可能),i += 1
O(n)
public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) { ArrayList<Integer> list = new ArrayList<Integer>(2); if(array==null||array.length==1) return list; int begin = 0; int end = array.length-1; while(begin<end){ if(array[begin]+array[end]==sum){ list.add(array[begin]); list.add(array[end]); break; }else if(array[begin]+array[end]>sum){ end--; }else if(array[begin]+array[end]<sum){ begin++; } } return list; }
时间: 2024-10-13 12:25:47