双指针,因为两个数,所以终止条件为while(left<right
)
/**
* 输入一个递增排序的数组和一个数字S,在数组中查找两个数,
* 使得他们的和正好是S,
* 如果有多对数字的和等于S,输出两个数的乘积最小的。
* @param array 递增排序的数组
* @param sum 和
* @return 两个数,使得他们的和正好是S
*/
public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
ArrayList<Integer> res=new ArrayList<>(2);
if(array==null||array.length==0||array[0]>sum){
return res;
}
int start=0,end=array.length-1;
int nSum=0;
while (start<end){
nSum=array[start]+array[end];
if(nSum>sum){
end--;
}else if(nSum<sum){
start++;
}else{
//找到一个
res.add(start);
res.add(end);
break;
}
}
return res;
}