剑指Offer之和为S的两个数字
题目描述
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
思路:夹逼(可以保证输出两个数的乘积最小的,举例说明:2 3 4 5 12 13 14 15 输出和为17的两个数,显然2和15的乘积小于其他两个数的乘积)。
1 import java.util.ArrayList; 2 public class Solution { 3 public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) { 4 ArrayList<Integer> list=new ArrayList<>(); 5 if(array==null || array.length==0) 6 return list; 7 int i=0,j=array.length-1; 8 while(i<j) { 9 if(array[i]+array[j]==sum) { 10 list.add(array[i]); 11 list.add(array[j]); 12 return list; 13 } 14 else if(array[i]+array[j]>sum) 15 j--; 16 else 17 i++; 18 } 19 return list; 20 } 21 }