我正在解决javascript中的leetcode TwoSum问题,我做了一个搜索算法,它会改变nums数组,直到第一个和最后一个索引是正确的数字,然后我尝试在改变之前搜索nums数组的原始值,以找到原始数组中正确数字的索引。但问题是当我修改第一个数组时,保存的副本数组被重新定义了,这样我就不能检查它并找到正确的索引,我试着将原始数组定义为一个函数甚至一个类,但都不起作用;我怎么才能不让它改变呢
const searchAlgorithm = (nums, target) => {
nums = nums.sort((a, b)=>a-b);
while(true){
total = nums[0]+nums[nums.length-1];
if(total>target){
nums.splice(nums.length-1, 1);
}
else{
if(total==target){
answers = [nums[0], nums[nums.length-1]];
return answers;
}
else{
nums.splice(0, 1);
}
}
}
}
const twoSum = (nums, target)=>{
original = nums;
[num1, num2] = searchAlgorithm(nums, target);
answers = [original.indexOf(num1, 0), original.indexOf(num2, 0)];
return (answers);
}
console.log(twoSum([3,6,8,2,11], 5));
1条答案
按热度按时间4c8rllxm1#
当你做original = nums时,它只给你2个名字,但是两个都指向相同的数组(相同的内存位置),因此改变一个将改变另一个。为此你需要做数组的深度复制(深度克隆)。original = someDeepCopyFunction(nums)