Javascript代码中的二和Leetcode看起来是正确的,但Leetcode说它是错误的
我正在做这项工作 我确信这段代码是正确的,我已经在Repl中测试过了,它看起来是正确的,但是Leetcode给了我一个错误 这是我的密码:Javascript代码中的二和Leetcode看起来是正确的,但Leetcode说它是错误的,javascript,Javascript,我正在做这项工作 我确信这段代码是正确的,我已经在Repl中测试过了,它看起来是正确的,但是Leetcode给了我一个错误 这是我的密码: var arr = []; var twoSum = function(nums, target) { for(var i = 0; i < nums.length; i++){ for(var j = i+1; j < nums.length; j++){ console.log(nums[i]
var arr = [];
var twoSum = function(nums, target) {
for(var i = 0; i < nums.length; i++){
for(var j = i+1; j < nums.length; j++){
console.log(nums[i] + ', ' + nums[j]);
var tot = nums[i] + nums[j];
if(tot === target){
arr.push(i,j);
console.log(arr);
return arr;
}
}
}
};
//var a = [2, 7, 11, 15];
//var b = 9;
var a = [2, 3, 4];
var b = 6;
twoSum(a, b);
为什么它期望[1,2]?当然,在这种情况下应该是[0,1],那么为什么我的代码要两次添加到arr数组中呢?在我看来,它像一只虫子
注意:我看到在Leetcode上有很多关于这个问题的帖子,但是没有一篇文章提到我在Javascript中遇到的具体问题
为什么它期望[1,2]
因为2+4=6
在这种情况下,它当然应该期望[0,1]
不,因为3+2=5
那么为什么我的代码要两次添加到arr数组
因为您在函数外部声明了数组。每次调用函数时都会重复使用它。将数组声明移到twoSum函数中,甚至更好:只需返回[i,j],而不是将其推入空数组。这里是另一个可以尝试的解决方案
var twoSum = function(nums, target) {
let map = {};
for (let i = 0; i < nums.length; i++) {
let compliment = target - nums[i];
if (map[compliment]) {
return [(map[compliment] - 1), i];
} else {
map[nums[i]] = i + 1;
}
}
};
twoSum([2, 3, 4],6);
这是一个最佳解决方案 /** *@param{number[]}nums *@param{number}目标 *@return{number[]} */ 函数twoSumnums,目标{ const numsObjs={};//创建nums obj,值作为键,索引作为值,例如:[2,7,11,15]=>{2:0,7:1,11:2,15:3} 对于let i=0;i
var twoSum = function(nums, target) {
let map = {};
for (let i = 0; i < nums.length; i++) {
let compliment = target - nums[i];
if (map[compliment]) {
return [(map[compliment] - 1), i];
} else {
map[nums[i]] = i + 1;
}
}
};
twoSum([2, 3, 4],6);