一、题目
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
输出描述:
对应每个测试案例,输出两个数,小的先输出。
二、分析及代码
1. 双指针
(1)思路
在数组两端设计两个指针,若对应数字之和小于 S,将头部指针后移,反之将尾部指针前移,直至找到和为 S 的两个数或指针相遇。
和为 S 的两个数,距离越远,乘积越小,因此上述方法找到的第一对数字即为所求解。
(2)代码
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
ArrayList<Integer> ans = new ArrayList<>();
if (array == null || array.length < 2)
return ans;
int l = 0, r = array.length - 1;
while (l < r && (array[l] + array[r] != sum)) {
if (array[l] + array[r] < sum)
l++;
else
r--;
}
if (l != r) {
ans.add(array[l]);
ans.add(array[r]);
}
return ans;
}
}
(3)结果
运行时间:16ms,占用内存:9308k。
三、其他
暂无。