【刷算法】和为S的两个数字

简介: 【刷算法】和为S的两个数字

题目描述


输入一个递增排序的数组和一个数字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;
}


//

相关文章
|
10月前
|
存储 算法 大数据
数字太大放不下,高精度来补,如何放下超大数字,以及进制转换,高精度真的超好玩。 洛谷1009,1015
数字太大放不下,高精度来补,如何放下超大数字,以及进制转换,高精度真的超好玩。 洛谷1009,1015
|
9月前
刷爆leetcode第六期
刷爆leetcode第六期
27 0
|
10月前
每日一题——丢失的数字
每日一题——丢失的数字
|
安全 Cloud Native
【刷题日记】357. 统计各位数字都不同的数字个数
本次刷题日记的第 30 篇,力扣题为:357. 统计各位数字都不同的数字个数 ,中等
|
算法
leetcode算法 每日一题(17.04消失的数字)day 1
今天开始小编开始给大家带来算法题目的讲解,首先我们看题目描述
147 0
刷爆leetcode第十二期 0026 数组中数字出现的次数
刷爆leetcode第十二期 0026 数组中数字出现的次数
112 0
刷爆leetcode第十二期 0026 数组中数字出现的次数
|
Python
LeetCode 268. 丢失的数字
给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。
109 0
|
存储 算法
刷 只出现一次的数字 | 刷题打卡
刷 只出现一次的数字 | 刷题打卡
103 0