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

166
Vistas
Algoritmo para contar valores únicos en la matriz utilizando el patrón de múltiples punteros, utilizó dos enfoques, ¿cuál es mejor?

La pregunta era implementar una función llamada countUniqueValues , que acepta una matriz ordenada y cuenta los valores únicos en la matriz. Puede haber números negativos en la matriz, pero siempre estará ordenada.

Usé el patrón de punteros múltiples para resolver esta pregunta de modo que tenga una complejidad de tiempo de O(n) y una complejidad de espacio de O(1). Usé dos enfoques diferentes, uno con un ciclo for y otro con un ciclo while .

¿Cuál de estos enfoques es mejor?

Enfoque 1: Uso del bucle for

 function countUniqueValues(arr) { if (arr.length === 0) return 0; let pointer1 = 0; for (let pointer2 = 1; pointer2 < arr.length; pointer2++) { if (arr[pointer1] !== arr[pointer2]) { pointer1++; arr[pointer1] = arr[pointer2]; } } return pointer1 + 1; }

Enfoque 2: Uso del ciclo while

 function countUniqueValues(arr) { if (arr.length === 0) return 0; let pointer1 = 0; let pointer2 = pointer1 + 1; while (pointer2 < arr.length) { if (arr[pointer1] !== arr[pointer2]) { pointer1++; arr[pointer1] = arr[pointer2]; pointer2++; } else if (arr[pointer1] === arr[pointer2]) { pointer2++; } } return arr.slice(0, pointer1 + 1).length; }

Complejidad de tiempo esperada: O(n)
Complejidad espacial esperada: O(1)

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

0

Usar for en lugar de while loop con exactamente la misma idea no es un enfoque diferente.

La lógica es correcta, pero podría haber sido mucho más simple. Desea encontrar esas posiciones en matrices donde los elementos son diferentes (bordes). Ahora su respuesta final es <#border>+1 .

 let border = 0; for (let i = 1; i < arr.length; i++) { if (arr[i - 1] != arr[i]) { border++; } } return border+1;

No necesita cambiar la matriz, no necesita mantener dos punteros.

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