当前位置: 首页 > 知识库问答 >
问题:

JavaScriptTwoSum算法:给定一个整数数组,返回两个数字的索引,使它们相加到一个特定的目标

鲜于宏义
2023-03-14

给定一个整数数组,返回两个数字的索引,使它们相加到一个特定的目标。

例子:

给定nums=[3,2,4],target=6,

因为nums[1]nums[2]=24=6

返回[1,2]

解决方案

var twoSum = function(nums, target) {
    for(let i = 0; i <= nums.length; i++){
        for(let j = 0; j <= nums.length; j++){
            if(nums[i] + nums[j] == target){
                return [i, j]
            }
        }
    }
};

上面的代码在其他情况下有效,但在本例中无效。

预期结果[1,2]

输出[0,0]

例如,我尝试使用不同的数字数组和不同的目标,即使你改变数字的顺序,它也能工作

例子:

新数组:[15,7,11,2],目标=9,

输出:[1,3]

我不明白这个解决方案出了什么问题,我希望有人能解释一下。谢谢

共有3个答案

胡安怡
2023-03-14
var twoSum = function (nums, target) {
var len = nums.length;
for (var i = 0; i < len; i++) {
    for (var j = i + 1; j < len; j++) {
        if (nums[i] + nums[j] == target) {
            return [i,j];
        }
    }
  }
};
廉博赡
2023-03-14

我不明白解决方案有什么问题,我希望有人能解释一下?

在这里,您的内部和外部循环都从0th开始,所以在[3,2,4]和目标6的情况下,它将返回[0,0],因为3 3等于目标,因此,为了处理同一个索引元素不被使用两次,在外循环和内循环之间产生了1的差异

使外部循环从0th索引开始,内部循环使用值i 1

js prettyprint-override">var twoSum = function(nums, target) {
    for(let i = 0; i < nums.length; i++){
        for(let j = i+1; j < nums.length; j++){
            if(nums[i] + nums[j] == target){
                return [i, j]
            }
        }
    }
};

console.log(twoSum([15, 7, 11, 2],9))
console.log(twoSum([3, 2, 4],6))
莫繁
2023-03-14


基本上,你可以检查目标的差异

假设同一索引不能使用两次

nums = [3, 2, 4], target = 6
nums[0] = 3
target = 6
diff = 6 - 3 = 3
nums.indexOf[3] = 0 // FAILURE case because it's the same index

// move to next iteration
nums[1] = 2
target = 6
diff = 6 - 2 = 4
nums.indexOf(4) = 2 // SUCCESS '4' exists in the array nums
// break the loop

这是leetcode接受的答案。

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {
    for (let index = 0; index < nums.length; index++) {
        const diff = target - nums[index];
        const diffIndex = nums.indexOf(diff);
        // "diffIndex !== index" takes care of same index not being reused
        if (diffIndex !== -1 && diffIndex !== index) {
            return [index, diffIndex];
        }
    }
};

运行时间: 72毫秒,比93.74%的两个和的JavaScript在线提交速度快。
内存使用: 38.5 MB,不到90.55%的两个和的JavaScript在线提交。

有人能帮我减少内存使用吗?

 类似资料:
  • 我想解决以下问题: 给定一个整数数组,返回两个数字的索引,使它们相加到一个特定的目标。 我将下面的数组作为输入-[2,7,11,15],目标为9。 因为nums[0]nums[1]=27=9,所以返回[0,1]。 这是我的密码- 这是解决我问题的正确方法吗?

  • 这是一个关于LeetCode的练习。我得到一个例外 第15行的UnboundLocalError。 为什么?如何修复它?

  • 给定一个无序整数列表,以这种方式打印两个总计为的整数(int 1小于或等于int 2,它们之间用空格隔开)。假设整数列表中总是有的解。int1和int2必须是正整数。 如果有多个解决方案,请打印差异最小的整数对。 例子: 这是我的代码,但是根据我们的编译器(这是我们班的一个练习),我对隐藏的测试用例有错误的输出。 更新:代码工作!

  • 嗨,伙计们,你们好吗?=)我是新来的Java,目前,我正在学习数组和循环,目前我真的在与它们作斗争。 我的任务是返回以结尾的数字数组。不要更改其余数字的顺序。我唯一能用的就是for循环。 我的大脑现在有点崩溃了,我不知道该怎么办。 当我返回一个结果时,它以的形式返回。 目前,我在考虑如何将结果排除在for循环之外。С你能帮我找到一种方法,将所有带有9的数字存储在一个新数组中吗?

  • 有一种方法可以将特定的数字从一个数组复制到另一个数组吗? 例如: 我有一个数组 ,我想将奇数和偶数复制到不同的数组中。因此,结果应该是

  • 本文向大家介绍写一个算法找到数组中两个元素相加等于指定数的所有组合相关面试题,主要包含被问及写一个算法找到数组中两个元素相加等于指定数的所有组合时的应答技巧和注意事项,需要的朋友参考一下