Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

112
Visualizações
El filtro devuelve el primer elemento de la matriz en lugar de

Estoy implementando un mapa hash para el problema del leetcode Two Sum.

 const testArrs = { 'first': [2,7,11,15], 'second': [3,2,4], 'third': [3,3] } function twoSum(nums, target) { let mapped = nums.map((item) => target - item); let returnedArr = mapped.filter((item) => { if (nums.includes(item)) { console.log(nums.indexOf(target-item)) return nums.indexOf(target - item) } }) console.log(returnedArr) //TODO check if returnedArr size == 2. } twoSum(testArrs['first'], 9)

La primera matriz asignada crea una matriz de hashes como "índices" que son la diferencia del objetivo de cada elemento en la matriz nums . Luego aplico un filtro a la matriz mapeada para ver si 2 elementos de la matriz mapeada están contenidos en la matriz nums, devolviendo el índice de esos elementos.

Cuando los índices se filtran en returnArr , parece devolver el primer elemento de nums en lugar de dos índices. [2] en lugar de [0,1] El registro antes de la devolución muestra que está registrando correctamente los índices 0 y 1 respectivamente.

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Eso es porque estás mezclando el filtro con la función de mapa. La función de mapa debe devolver un booleano (que creará una matriz de los objetivos que cumplen con la condición). Y, después de obtener esos valores, en su caso, los que están contenidos en los números, los mapea para obtener su índice. Como esto:

 const testArrs = { 'first': [2,7,11,15], 'second': [3,2,4], 'third': [3,3] } function twoSum(nums, target) { let mapped = nums.map((item) => target - item); let returnedArr = mapped.filter((item) => { return nums.includes(item) }) return returnedArr.map((item)=> nums.indexOf(target-item)) } console.log(twoSum(testArrs['first'], 9))`
about 4 years ago · Juan Pablo Isaza Relatório

0

Básicamente return nums.indexOf(target - item) a false si el index es 0 . En su lugar, debe verificar si nums.indexOf(target - item) >= 0 .

Sin embargo, Array#filter no es realmente lo que estás buscando:

El método filter() crea una nueva matriz con todos los elementos que pasan la prueba implementada por la función proporcionada.

En su lugar, debe usar un Map para guardar los pares de números e índices y luego verificar si hay un complemento en el Mapa:

 function twoSum(nums, target) { const map = new Map(); for (let i = 0; i < nums.length; i++) { map.set(nums[i], i); } for (let i = 0; i < nums.length; i++) { const complement = target - nums[i]; if (map.has(complement) && map.get(complement) != i) { return [i, map.get(complement)]; } } } const testArrs = { 'first': [2,7,11,15], 'second': [3,2,4], 'third': [3,3] }; console.log( twoSum(testArrs['first'], 9) );

Una forma más rápida sería hacerlo en una iteración:

 function twoSum(nums, target) { const map = new Map(); for (let i = 0; i < nums.length; i++) { const complement = target - nums[i]; if (map.has(complement)) { return [map.get(complement), i]; } map.set(nums[i], i); } } const testArrs = { 'first': [2,7,11,15], 'second': [3,2,4], 'third': [3,3] }; console.log( twoSum(testArrs['first'], 9) );

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda