【问题标题】:Node JS displaying value at index instead of indicesNode JS在索引而不是索引处显示值
【发布时间】:2022-01-20 18:40:10
【问题描述】:

编写此 2sums 代码以获得有效的O(N) 时间复杂度算法以解决以下问题

            Input: nums = [2,7,11,15], target = 9
            Output: [0,1]
            Output: Because nums[0] + nums[1] == 9, we return [0, 1].

不幸的是,数组nums 的值显示在输出中,而需要将indices 显示在输出中

下面需要做哪些改变

            let hashTwoSum = (array, sum) => {
                let numsObj = {}
                let nums = []
               
                for(let i in array){
                    let addend = sum - array[i]
                   
                    if (addend in numsObj){

                        nums.push([addend, array[i]])

                    }
                    numsObj[array[i]] = i

                    
                }
                return nums
                
            }

            let array = [2,7,11,15]
            console.log(hashTwoSum(array,9))
            
            

感谢您的帮助

问候,

卡罗琳

【问题讨论】:

  • 而不是将数组[i]处的值推入nums,而是推入i
  • 请不要使用for(let i in array){...} 迭代数组。 for/in 用于迭代对象的属性,而不是数组的元素。有关原因的详细信息,请参阅此处:stackoverflow.com/questions/22754315/…。使用for/of 来迭代数组的项。

标签: javascript node.js data-structures ecmascript-6


【解决方案1】:

正如@jriend00 所说,不要使用for(... in ...) 循环来迭代数组。但是在您需要索引的情况下,您需要使用旧的for 循环:for(let i = 0; i < array.length; i++)。而当你保存结果时,你需要同时推送两个indicesnums.push([numsObj[addend], i]).

这是一个完整的例子:

let hashTwoSum = (array, sum) => {
    let numsObj = {}
    let nums = []

    for(let i = 0; i < array.length; i++){
        let addend = sum - array[i]

        if (addend in numsObj){
            nums.push([numsObj[addend], i])
        }
        numsObj[array[i]] = i
    }
    return nums
}

let array = [2,7,11,15,6]
console.log(hashTwoSum(array,17))

这将输出:

[ [ 0, 3 ], [ 2, 4 ] ]

因为 2 + 15 和 11 + 6 都等于 17。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-31
    • 2016-08-04
    • 2016-02-05
    • 2014-06-28
    • 2018-04-16
    • 2020-05-16
    相关资源
    最近更新 更多