Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

362
Vistas
6kyu_Pair of gloves_CodeWards_i++

Code War problem

My Solution on this problem:

function numberOfPairs(gloves) {
  const glove = gloves.slice().sort();
  const pairs = [];

  for (let i = 0; i < glove.length - 1; i++) {
    if (glove[i] == glove[i+1]) {
      pairs.push(glove[i]);
    }
  }
  return pairs.length;
}

It pass the initial test but failed the attempt/random test. 2nd test

My Second Solution, I add i++. It pass the Attempt

function numberOfPairs(gloves) {
  const glove = gloves.slice().sort();
  const pairs = [];

  for (let i = 0; i < glove.length - 1; i++) {
    if (glove[i] == glove[i+1]) {
      pairs.push(glove[i]);
      i++ // How?
    }
  }
  return pairs.length;
  
}

Can you guys help me how does i++ fix the problem.

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

You can also group the colors and then count the pairs using Array.prototype.reduce.

function solution(input) {
  return input.reduce(
    ([pairs, hash], clr) => {
      hash[clr] = (hash[clr] ?? 0) + 1;
      return [pairs + (hash[clr] % 2 === 0 ? 1 : 0), hash];
    },
    [0, {}]
  )[0];
}

console.log(solution(["red", "green", "red", "blue", "blue"]));
console.log(solution(["red", "red", "red", "red", "red", "red"]));

about 4 years ago · Juan Pablo Isaza Denunciar

0

Because if you found a pair, the next element is equal to the actual and you're advancing only one element in the array at a time. If you found a pair, the next element was the one found, then you have to advance another position in the array when you found it.

Say you have this array: [1, 2, 5, 8, 9, 2, 8] Let's number the lines to make it easier:

 1 function numberOfPairs(gloves) {
 2     const glove = gloves.slice().sort();
 3     const pairs = []; 
 4     for (let i = 0; i < glove.length - 1; i++) {
 5         if (glove[i] == glove[i+1]) {
 6             pairs.push(glove[i]);
 7             i++ // How?
 8         }
 9     }
10     return pairs.length;
11 }

after line 2 you will have the following sorted array:

[1, 2, 2, 5, 8, 8, 9]

with 2 pairs in it. Then you will start iteration of the array with i = 0 so in line 6 in the first iteraction glove[i] is 1 and glove[i+1] is 2. Different, so the for continues to i = 1.

Now the if in line 6 tests glove[i] with i = 1 making glove[i] = 2 and glove[i+1] also = 2 (first pair). So it enters the if and pushes the first number to pairs: 2.

Now if i++ isn't present in line 7, what would happen is that for would countinue to i = 2 making glove[i] = 2 and glove[i + 1] = 5. But the 2 makes part of the first pair encountered. So this is incorrect. We must skip the 2nd 2 that's what i++ is line 7 is there for. It would be even worse if the 4th element in the array was 2 again because it would inform another pair when there is only one.

After this for will continue not to i=2 but correctly to i=3 testing elements 5 and 8 for the next pair.

Hope this explains clearly enough.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda