[https://drive.google.com/file/d/12qIWazKzBr1yJGpo1z106euXVJMKMwEa/view?usp=sharing][1]мне нужно найти индекс двух чисел, сумма которых = цель[число указано в качестве аргумента], я пытался решить это через цикл for, но я не получаю indexex правильно, как будто первые два числа массива равны 1,1, а цель установлена как два, я получаю ответ как [0,0], но я хочу [0,1]
let arr = [1,1,8,9,7,22,6]
var twoSum = function(nums, target) {
for(i=0;i<nums.length;i++){
for(j=i+1;j<nums.length;j++)
if (nums[i] + nums[j]==target){
return [nums.indexOf(nums[i]) , nums.indexOf(nums[j])]
}
}
};
console.info(twoSum(arr, 2))
i am expecting output as [0,1]
but i am getting output as [0,0]
[1]: https://i.stack.imgur.com/n1jo7.png
Не используйте indexof. Поскольку значение j в первый раз будет равно 1, а indexOf вернет самое первое вхождение 1 из массива.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Внесенные изменения: - Просто измените оператор return.
Код:-
let arr = [1,1,8,9,7,22,6]
var twoSum = function(nums, target) {
for(i=0;i<nums.length;i++){
for(j=i+1;j<nums.length;j++)
if (nums[i] + nums[j]==target){
return [i,j]
}
}
};
console.info(twoSum(arr, 2))
Вывод:-
node /tmp/fiXkoJ2VkT.js
[ 0, 1 ]
Обратите внимание, допустим, вам нужна сумма 9. [0,2] и [1,2] оба суммируются, чтобы дать 9, но вывод будет [0,2] не [1,2], поскольку вы проверяете 1-й элемент во всех случаях, чем 2-й элемент во всех случаях и так далее..
Обновлен раздел .. {ваш запрос}
пусть arr = [2,5,5,11] для этого массива, если цель равна 10, он все еще возвращает [1,1], как я могу это исправить
На моей стороне все работает нормально.. Вывод [1,2] показывает
у меня все еще отображается как 1,1 я не знаю почему
поделитесь своим скриншотом в вопросе ..
см. мой обновленный раздел
что это за условие для num[i]!==num[j] в вашем коде..
Метод indexOf возвращает первое вхождение определенного значения. Поскольку у вас есть 1 в обоих индексах 0 и 1, он вернет только 0, потому что это первое вхождение 1.
Просто верните i и j себя.
return [i, j];
пусть arr = [2,5,5,11] для этого массива, если цель равна 10, он все еще возвращает [1,1], как я могу это исправить
пусть arr = [2,5,5,11] для этого массива, если цель равна 10, он все еще возвращает [1,1], как я могу это исправить
let arr = [1, 1, 8, 9, 7, 22, 6];
function twoSum(arr, target) {
for (let i = 0; i < arr.length; i++) {
for (let j = i + 1; j < arr.length; j++) {
if (arr[i] + arr[j] === target) console.info([i, j]);
}
}
}
twoSum(arr, 2);Ваш ответ может быть улучшен с помощью дополнительной вспомогательной информации. Пожалуйста, отредактируйте , чтобы добавить дополнительные сведения, такие как цитаты или документация, чтобы другие могли подтвердить правильность вашего ответа. Вы можете найти больше информации о том, как писать хорошие ответы в справочном центре.
просто верни i и j..