还有其他方法可以在数组中找到总和为k的数字吗?

时间:2019-10-14 17:44:41

标签: javascript arrays

我有一个整数数组和一个数字k。是否有必要确定数组中是否存在两个总和为k的数字?

function findPairs(nums, k) {
  var s = [];
  var length = nums.length;
  for (var i = 0; i < length; i++) {
    if (s[nums[i]] === k - nums[i]) {
      console.log(nums[i], k - nums[i])
      return true;
    } else {
      s[k - nums[i]] = nums[i];
    }
  }
  return false;
}

var nums = [10, 15, 3, 7]
var k = 17

console.log(findPairs(nums, k))

为什么我的代码不起作用?

2 个答案:

答案 0 :(得分:1)

我的猜测是您遇到语法错误或忘记了实际声明一个函数,因为问题的当前版本中的代码似乎按预期工作。

顺便说一句,我建议使用对象或Set而不是数组来存储另一对,因为对于k的较大值,您的s数组可能会消耗结果,某些JavaScript引擎上的内存很大。

function findPairs(nums, k) {
  var s = {};
  var length = nums.length;

  for (var i = 0; i < length; i++) {
    if (s[nums[i]] === k - nums[i]) {
      console.log(nums[i], k - nums[i]);
      return true;
    }

    s[k - nums[i]] = nums[i];
    console.log(s); // see the lookup table after each iteration
  }

  return false;
}

var nums = [10, 15, 3, 7];
var k = 17;

console.log(findPairs(nums, k));

答案 1 :(得分:-2)

功能解决方案

const findPairs = (nums, k) =>
  nums
    .flatMap((v, i, arr) => arr.slice(i + 1).map(w => [v, w]))
    .filter(pair => pair[0] + pair[1] === k);

console.log(findPairs([1, 2, 3, 4, 5, 6], 5));