您的位置:首页 > Web前端

【剑指Offer-知识迁移能力】有序数组中和为S的两个数字

2018-01-27 14:36 429 查看

题目描述

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

解题思路

由于是递增排序的数组,所以,我们可以使用两个指针,一个从前往后指向较小的数,一个从后往前指向较大的数,这样找到的两个数的乘积必然最小。当两数的和大于S时,较大的数字指针向左移动,当两数的和小于S时,较小的数字指针向右移动,当两数靠近时,查找结束。

代码实现

import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
ArrayList<Integer> result = new ArrayList();
if(array == null || array.length < 2){
return result;
}
// small指向小数字位置的指针
int small = 0;
// big指向大数字位置的指针
int big = array.length - 1;
int curSum = array[small] + array[big];
// 让两个数字的位置不断靠近
while(small < big){
if(curSum == sum){
result.add(array[small]);
result.add(array[big]);
return result;
}
if(curSum > sum){
big--;
}
if(curSum < sum){
small ++;
}
curSum = array[small] + array[big];
}
return result;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐