【题目】
题目描述:
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
输出描述:
对应每个测试案例,输出两个数,小的先输出。
【思路】
设置一个最低指针 low 和最高指针 high ,求和。如果结果大于目标值,high–;如果结果小于目标值,low++;否则相等即找到结果(此时找到的也是乘积最小)。
【代码】
Java
import java
.util
.ArrayList
;
public class Solution {
public ArrayList
<Integer> FindNumbersWithSum(int [] array
,int sum
) {
ArrayList
<Integer> result
= new ArrayList<>();
int length
= array
.length
;
if (length
== 0) {
return result
;
}
int low
= 0, high
= length
- 1;
while (low
< high
) {
long curNum
= array
[low
] + array
[high
];
if (curNum
< sum
) {
low
++;
} else if (curNum
> sum
) {
high
--;
} else {
result
.add(array
[low
]);
result
.add(array
[high
]);
break;
}
}
return result
;
}
}