题目描述
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
输出描述:
对应每个测试案例,输出两个数,小的先输出。
思路分析
题目其实隐藏着一个信息,两个数位置相差越远,乘积则越小。所以我们可以用两个指针「左右夹逼」的方式,慢慢找出答案。
解释说明:
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 low = 0;//低位指针,从头开始
int hight = array.length-1;//高位指针,从末端开始
while(low < hight){
if( array[low]+array[hight] == sum){
list.add(array[low]);
list.add(array[hight]);
return list;
}else if( array[low]+array[hight] > sum){ //大于sum,说明太大了,hight左移寻找更小的数
hight--;
}else{ //如果和小于sum,说明太小了,low 右移寻找更大的数
low++;
}
}
return list;
}
}
链接:https://www.nowcoder.com/questionTerminal/390da4f7a00f44bea7c2f3d19491311b?f=discussion
来源:牛客网
网友评论