#javascript #node.js #algorithm
Вопрос:
Итак, я решил проблему twoSum, которую вы можете найти здесь: twoSum и я знаю, что есть лучшие и более эффективные решения, но для этого я просто пытаюсь понять, почему я получаю пустой массив, если я не переназначу переменную j внутри цикла while. См. Код ниже. Когда я попытался решить эту проблему, назначив j вне цикла, это не сработало. См.Комментарии к коду.
Мой ответ на полпути/первоначальная мысль заключалась в том, что, присваивая значение j вне цикла, он выполняет прямое присвоение по значению, что означает, что его значение не меняется, поскольку интерпретатор работает только сверху вниз и фактически не возвращается для проверки. Таким образом, это означало бы, что если бы j был назначен по ссылке, эта проблема не возникла бы?? Я не знаю, на правильном ли я пути
var twoSum = function (nums, target) {
let indecesArr = [];
let i = 0;
//j declaration without assignment
let j;
//let j = i 1; //this will cause return to be empty array
while (i < nums.length) {
//j's value has to be reassigned here otherwise return is an empty [] array
j = i 1;
while (j < nums.length) {
if (nums[i] nums[j] === target) {
indecesArr.push(i, j);
}
j ;
}
i ;
}
return indecesArr;
};
console.log(twoSum([3, 2, 4], 6)); //output [1,2]
Ответ №1:
Вы увеличиваете значение j во внутреннем цикле while.
Поэтому, когда i =0, что означает числа[i] = 3, тогда j увеличивается до самого конца, так как у них нет совпадающей пары. Поэтому в следующий раз, когда i = 1 и так далее, j уже прошел до конца массива. Код внутри второго цикла никогда не выполняется с i=1,следовательно, нет совпадающей пары