我有一个整数数组和一个数字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))
为什么我的代码不起作用?
答案 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));