二和数组-蛮力-我做错了什么?

vof42yt1  于 2022-10-02  发布在  Java
关注(0)|答案(6)|浏览(127)
var twoSum = function(nums, target) {

    let index = 0
    let i = 1
    while (index <= nums.length - 1) {
            while (i <= nums.length - 1) {
                if (nums[index] + nums[i] === target) {
                    if (nums[index] === nums[i]) {
                        i = i + 1
                    }
                  return([index, i])
                } else {
                    i = i + 1
                }
            }
        index = index + 1
        i = 0
    }
};

twoSum([3, 3], 6)

预期输出:[0,1]已收到:[0,2]

描述:给定一个整数数组和一个整数目标,返回这两个数字的索引,使它们相加为目标。

7uzetpgm

7uzetpgm1#

当您找到匹配的结果时,需要删除以下代码

if (nums[index] === nums[i]) {
        i = i + 1
    }
var twoSum = function(nums, target) {

    let index = 0
    let i = 1
    while (index <= nums.length - 1) {
            while (i <= nums.length - 1) {
                if (nums[index] + nums[i] === target) {
                  return([index, i])
                } else {
                    i = i + 1
                }
            }
        index = index + 1
        i = 0
    }
};

console.log(twoSum([3, 2, 0,1,4], 6))
bvpmtnay

bvpmtnay2#

只要移走这个块就行了。

if (nums[index] === nums[i]) {
                        i = i + 1
                    }

顺便说一句,你为什么从头开始写这段代码。你没有得到所有可能的数字。无论输入数组有多长,您只返回2个索引。

djp7away

djp7away3#

@Lucumt已经指出,您应该省略代码中的两行。然而,表达函数的一种稍微传统的方式将涉及for()循环,因为它们会使代码的可读性略高于所选的while()构造。内部循环也应始终从index+1开始,如下所示:

var twoSum = function(nums, target) {
  const res=[];
  for (let index=0; index <nums.length; index++) {
    for (let i=index+1;i <nums.length; i++) {
      if (nums[index] + nums[i] === target ) res.push([index, i]);
    }
  }
  return res
}
console.log(twoSum([3, 3], 6)) // [[0,1]]
// second example:
console.log(twoSum([1,6,4,7,3,2,8,3], 6)) // [[2,5],[4,7]]

我的代码片段将在数组数组中返回“所有”可能的和。如果您只想要第一个解决方案,只需执行twoSum(arr,targetNum)[0]

vohkndzv

vohkndzv4#

let index = 0
while (index <= nums.length - 1) {
        let i = 0
        while (i++ <= nums.length - 1) {
            if (index!==i && nums[index] + nums[i] === target) {
              return([index, i])
            }
        }
    index++
}
w3nuxt5m

w3nuxt5m5#

您可以使用具有相同逻辑的for-loop,因为它看起来更简单。

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]
            }
        }
    }
};
3ks5zfa0

3ks5zfa06#

let index = 0
  let i = 1
  while (index <= nums.length - 1) {
          while (i <= nums.length - 1) {
              if (nums[index] + nums[i] === target) {
                  // if (nums[index] === nums[i]) {
                  //     i = i + 1
                  // }
                return([index, i])
              } else {
                  i = i + 1
              }
          }
      index = index + 1
      i = 0
  }
};

console.log(twoSum([3, 3], 6));

跳过上面的“if”语句,它会增加本例中i的值。

相关问题