Estoy escribiendo una función JavaScript sumPair(numbers, target) para encontrar los índices de un par de elementos consecutivos de una matriz dada cuya suma es igual a un número objetivo específico. La función debe devolver una matriz de los índices del par de elementos consecutivos o la matriz [-1, -1] si no se encuentra un par. Mi función funciona si no necesito devolver [-1, -1] cuando no se encuentra ningún par, pero devuelve [-1, -1] incluso si hay un par.
var sumPair = function(nums, target) { for (let i = 0; i < nums.length; i++) { for (let j = i + 1; j < nums.length; j++) { if (nums[i] + nums[j] == target) { return [i, j] } else if (nums[i] + nums[j] !== target) { return [-1, -1] } } } }; document.write(sumPair([10, 20, 10, 40, 50, 60, 70, 30], 50));El problema principal es que su declaración else if no está dentro del ciclo, sin embargo, si la coloca en el ciclo, devolverá falso en el primer falso que obtenga, en lugar de recorrer todo el conjunto.
En su lugar, devuelva el caso base y, si hay una coincidencia, devolverá la coincidencia antes de que se active el caso base.
<!DOCTYPE html> <html> <head> </head> <body> <script type="text/javascript"> var sumPair = function(nums, target) { for(let i = 0; i < nums.length; i++){ for(let j = i+1; j < nums.length; j++){ if(nums[i] + nums[j] == target){ return ([i, j]) } } } return([-1,-1]) }; document.write(sumPair([10,20,10,40,50,60,70,30],50)); </script> </script> </body> </html>Puede omitir el segundo bucle for y solo verificar i+1
var sumPair = function(nums, target) { for (let i = 0; i < nums.length - 1; i++) { if(nums[i] + nums[i+1] == target) { return [nums[i], nums[i+1]] } } return [-1,-1] };Esta respuesta contiene dos soluciones, una para buscar los dos primeros índices de índices consecutivos (¡literalmente!) y otra de dos índices cuya suma de valores es el valor buscado.
Búsqueda de índices consecutivos.
Simplemente itere desde el índice 1 hasta que sea más pequeño que la longitud de la matriz. Compruebe la suma del artículo anterior y el artículo real. devolver sus índices.
const sumPair = (nums, target) => { for (let i = 1; i < nums.length; i++) { if (nums[i - 1] + nums[i] === target) return [i - 1, i]; } return [-1, -1]; }; console.log(sumPair([10, 20, 10, 40, 50, 60, 70, 30], 50));Busque algunos índices más pequeños.
Comience a iterar desde cero y almacene el primer índice encontrado en un objeto y verifique si la suma es true .
const sumPair = (nums, target) => { const indices = {}; for (let i = 0; i < nums.length; i++) { if (nums[i] in indices) return [indices[nums[i]], i]; indices[target - nums[i]] ??= i; } return [-1, -1]; }; console.log(sumPair([10, 20, 10, 40, 50, 60, 70, 30], 50));