题目
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
思路
定义两个指针plow、phight,一个指向数组第一个数,一个指向数组最后一个,从数组首末两端夹进,如两个数和为s。则返回,因为数组为递增数组,所以找到第一组数乘积最小,若和小于s,则plow++,大于则phight–
【相关双指针解决连续正数序列和为s,plow初始指向1,phight初始指向2】
实现
import java.util.ArrayList;
//双指针,一个指向第一个,一个指向最后一个
public class Solution {
public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
ArrayList<Integer> list=new ArrayList<Integer>();
if(array==null||array.length<2) return list;
int plow=0,phight=array.length-1;
while(plow<phight){
int count=array[plow]+array[phight];
if(count==sum){//因为数组为递增,所以第一个找到两个数一定乘积最小
list.add(array[plow]);
list.add(array[phight]);
return list;
}else if(count<sum){
plow++;
}else{
phight--;
}
}
return list;
}
}