在过去的几个小时里,我一直在研究两个和的问题,似乎无法解释只有两个数字并且它们的和与第一个数字加倍的情况相同的情况。
结果应该是[0,1],但是我却是[0,0]。
let nums = [3,3];
let targetNum = 6;
function twoSum(nums, target) {
for (let i = 0; i < nums.length; i++) {
for (let b = i+1; b < nums.length; b++) {
if ((nums[i] + nums[b]) == target) {
return [nums.indexOf(nums[i]), nums.indexOf(nums[b])];
}
}
}
}
console.log(twoSum(nums, targetNum))
答案 0 :(得分:1)
我的方法使用javascript对象并以 O(n)时间复杂度完成算法。
const twoSum = (nums, target) => {
let hash = {}
for(i=0;i<nums.length;i++) {
if (hash[nums[i]]!==undefined) {
return [hash[nums[i]], i];
}
hash[target-nums[i]] = i;
}
};
console.log(twoSum([2,7,11,15], 9)); // example
答案 1 :(得分:0)
这不是解决问题的方法。遍历数组,然后将目标编号的补码保存在数组中。这也将解决您的困境。
答案 2 :(得分:0)
您应该考虑indexOf(i)->从第一个元素开始,找到匹配项后返回索引!这就是为什么在您的代码中, nums.indexOf(nums [i])和 nums.indexOf(nums [b])在两种情况下基本上都是3的原因,将返回0,因为3是数组中的第一个元素。
代替执行此操作,而是返回索引本身。
let nums = [3,3];
let targetNum = 6;
function twoSum(nums, target) {
for (let i = 0; i < nums.length; i++) {
for (let b = i+1; b < nums.length; b++) {
if ((nums[i] + nums[b]) == target) {
return i + "" +b;
}
}
}
}
console.log(twoSum(nums, targetNum))