题目描述:
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
分析题目:
数组是有序的
结果如果有多组,返回乘积最小的一组
java代码实现:
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
ArrayList<Integer> a = new ArrayList<Integer>(2);
if(array.length == 0){//判空
return a;
}
int j = array.length-1;//i从前往后 j从后往前
for(int i = 0;i < array.length;i++){
if(j == i){//两者相遇 返回结果
return a;
}
if(array[i]+array[j] == sum){//判定成功
a.add(array[i]);
a.add(array[j]);
return a;
}
if(array[i] + array[j] > sum){
//大于sum 则需要j前移一位 此时i-1 是因为循环下一轮i+1 我们提前减去1
j -= 1;
i -= 1;
continue;
}
if(array[i] + array[j] < sum){//小于sum i后移 j重新指向最后一个
j = array.length-1;
continue;
}
}
return a;
}
}
思路写在注释中