【发布时间】:2021-07-04 22:14:04
【问题描述】:
我正在尝试解决一个关于 leetcode 的初学者问题。
给定一个整数数组 nums 和一个整数 target,返回这两个数字的索引,使它们相加为目标。
我的解决方案在某些测试用例上运行良好,但在这方面失败了:
*
Example:
Input: nums = [3,3], target = 6
Output: [0,1]
这是我的代码:
let nums = [3, 3];
let target = 6;
var twoSum = (nums, target) => {
for (let i = 0; i < nums.length; i++) {
let result = [];
if (target === nums[i] + nums[i + 1]) {
result.push(nums.indexOf(nums[i]));
result.push(nums.indexOf(nums[i + 1]));
return result;
}
}
};
console.log(twoSum(nums, target));
这里的输出是[0,0],而不是[0,1]。
逻辑哪里出错了?我清楚地将nums[i + 1] 作为第二个值推送到数组中。
【问题讨论】:
-
indexOf返回找到值的第一个索引。只需推送i和i + 1。 -
result.push(i + 1)?您的算法也不起作用,它只能找到连续的解决方案。尝试例如[1, 0, 1] 与目标 2。 -
作为旁注:一个有效的算法可以在 O(1/2 * n) 中解决这个问题,以防有人想自己写一个解决方案(公开回答“挑战”在某种程度上击败了挑战的目的)
-
让我们开始说 nums.indexOf[nums[i]] 等于 i
-
谢谢大家的回答,我应该多看一下代码,现在在你们指出之后,代码看起来真的很愚蠢!
标签: javascript