剑指OfferJZ42 和为S的两个数字(JavaScript:map)

时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M 热度指数:430334
本题知识点: 数学 数组 双指针

题目描述
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
返回值描述:
对应每个测试案例,输出两个数,小的先输出。
示例1
输入
[1,2,4,7,11,15],15
返回值
[4,11]

思路:用map记录,获取map的sum - array[i]即val,不存在则map.set(array[i],temp),存在则计较大小并存储序列数组。

function FindNumbersWithSum(array, sum)
{
    
    
    // write code here
    const map = new Map()
    let min ,arr = []
    for(let i = 0 ; i < array.length ; i++){
    
    
        let temp = sum - array[i]
        if(map.get(temp)){
    
    
            let produce = temp*map.get(temp)
            if(!min){
    
    
                min = produce
                arr = [temp,map.get(temp)]
            }else{
    
    
                min = Math.min(min,produce)
                if(min === produce){
    
    
                    arr = [temp,map.get(temp)]
                }
            }
        }else{
    
    
            map.set(array[i],temp)
        }
    }
    return arr
}

猜你喜欢

转载自blog.csdn.net/weixin_44523860/article/details/115146324