1. 题目描述
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
2. 题目分析
- 使用双指针法,分别指向开头和结尾
- 如果:
if (array[left] + array[right] > sum)
则right--;
- 如果:
array[left] + array[right] < sum
则left++;
3. 题目代码
public ArrayList<Integer> FindNumbersWithSum(int[] array, int sum) {
ArrayList<Integer> list = new ArrayList<>();
int left = 0;
int right = array.length - 1;
while (left < right) {
if (array[left] + array[right] == sum) {
list.add(array[left]);
list.add(array[right]);
return list;
} else if (array[left] + array[right] > sum) {
right--;
} else {
left++;
}
}
return list;
}