首页 > 解决方案 > 有没有其他方法可以在数组对中找到总和为 k 的数字?

问题描述

我有一个整数数组和一个数字 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))

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

标签: javascriptarrays

解决方案


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

顺便说一句,我建议使用对象或 aSet而不是数组来存储另一对,因为对于较大的 值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));


推荐阅读