如果sum等于target,则返回数组索引的索引

问题描述 投票:0回答:3

我正在尝试使用leetcode为编码采访做好准备。在第一个问题中,我必须返回其总和等于给定目标的数字的索引。我的结果满足19个中的13个测试。问题在于失败

Input:
[3,3]. target=6
Output:
undefined
Expected:
[0,1]

有人可以给我一个暗示我在哪里失败?

我的解决方案

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {
    for (var i=0; i< nums.length; i++)
    {
        for (var j=1; j< (nums.length-1); j++)
        {
            if ((nums[i]+nums[j]) == target)
                {
                    var arr = [nums.indexOf(nums[i]), nums.indexOf(nums[j])];
                    arr.sort();
                    return arr;
                }
        }
    }
};
javascript
3个回答
2
投票

当数组的长度为2时,你的内环是:j=1; j < 1; j++

代码永远不会进入,因此不会返回任何内容。

只需更改循环顺序:

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {
    for (var i=0; i< nums.length - 1; i++)
    {
        for (var j= i + 1; j < (nums.length); j++)
        {
            if ((nums[i]+nums[j]) == target)
                {
                    return [i,j];
                }
        }
    }
};
console.log(twoSum([3,3], 6));

0
投票

我现在没有时间进行测试但是我看到你的代码并认为for循环的范围可能是错误的(var i = 0; i <nums.length; i ++)它将是0,1,2它出来了由于nums的长度为2但没有索引为2的nums,nums的索引仅为0而1为2。


0
投票
    /**
     * @param {number[]} nums
     * @param {number} target
     * @return {number[]}
     */
            var twoSum = function(nums, target) {
            var dic = new dDictionary<int, int>();
            for (var i=0; i<nums.length - 1; i++)
                {
                    var remind = target - nums[i];
                    if(dic.containt[remind])
                        {
                            return [i, dic.containt[remind]];
                        }
                        else{
                            dic.add(remind, i);
                        }
                };
            console.log(twoSum([3, 3], 6));
© www.soinside.com 2019 - 2024. All rights reserved.