您的位置:首页 > Web前端

剑指offer——和为s的两个数字且乘积最小

2016-07-22 19:44 246 查看

问题描述:

输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。

思路:

可以设定两个指针,第一个指针指向数组的第一个元素,第二个指针指向最后一个元素,不断改变第一个指针的位置就可以确定和为S的两个数字。这里还有一个要求是这两个数字的乘积最小,实际上由于数组是递增排序的,所以第一个找到的两个数字就是乘积最小的两个数字,相反如果要求是乘积最大的呢?当然是中间位置找到的那两个数字了。这是数学上的知识了,不再赘述。所以虽然有了乘积最小的要求,实际上是形同虚设的。

代码实现:

import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
ArrayList<Integer> result = new ArrayList<Integer>();
if(array == null||array.length == 0) return result;
int low = 0;
int high = array.length-1;
while(low<high){
if(array[low]+array[high] == sum){
//由于数组是递增排序的,所以第一个找到的数对肯定是乘积最小的。
//比如,1+4=2+3,如果从第一个位置开始找的话,显然1与4的乘积是最小的
result.add(array[low]);
result.add(array[high]);
break;
}else if(array[low]+array[high] < sum){
low++;
}else{
high--;
}
}
return result;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: