题目描述

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

解题思路

数组是递增的,且给的数字S是固定的,那就可以用夹逼法。
两个指针left和right从数组的两端开始,要是left和right指向的数字之和大于S,说明right得向左移动一下,因为right的左边是比它小的数字;要是left的right指向的数字之和小于S,说明left得向 右边移动一下,因为left的右边是比它大的数字。left和right碰头了说明该结束了。

代码实现

function FindNumbersWithSum(array, sum)
{
    if(!array || array.length < 2 || sum === 0)
        return [];
    var left = 0;
    var right = array.length-1;
    var res = [];
    while(left !== right) {
        var curSum = array[left]+array[right];
        if(curSum === sum){
            res.push(array[left]);
            res.push( array[right]);
            break;
        }
        else if(curSum > sum)
            right--;
        else 
            left++
    }
    return res;
}


耳东
766 声望51 粉丝

知乎专栏:[链接]