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

374
Vistas
¿Cómo implementar un algoritmo para detectar si un número tiene 2 dígitos consecutivos?

Quiero crear una función que devuelva verdadero si un número tiene dígitos consecutivos o no,

ejemplo:

  • si la entrada es 11, devolverá verdadero
  • si la entrada es 21 devolverá falso
  • si la entrada es 323 devolverá falso porque aunque tengamos 3 repetidos no son consecutivos

Mi solución en este momento es transformar el número en una matriz y recorrer el número uno por uno, si el siguiente número es igual al número actual, simplemente devolvemos verdadero. Pero esto tiene un tiempo de complejidad de O (n) y me preguntaba si alguien puede encontrar una solución mejor.

Gracias

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

0

Podría decirse que existe una solución mejor en la que no necesita convertir el número en una cadena o matriz de números/carácter. Funciona de la siguiente manera:

  1. Inicialice una variable curr a -1 .
  2. Ejecute un ciclo while num > 0 y haga lo siguiente:
  • next_curr = num % 10
  • if next_curr == curr: return true
  • curr = next_curr
  • num = num / 10 (división entera)
  1. Si el bucle se completa, devuelve falso.

Este es un algoritmo de complejidad de tiempo O(log n) de un paso donde n es el número de entrada. La complejidad del espacio es O(1)

Tenga en cuenta que si bien su algoritmo también tenía una complejidad de tiempo O (log n O(log n) , realizó 2 pases y también tenía una complejidad de espacio de O(log n) .

No he escrito JS desde hace algún tiempo, pero aquí hay una posible implementación del algoritmo anterior en JS:

 function sameAdjacentDigits(num) { // to deal with negative numbers and // avoid potential problems when using Math.floor later num = Math.abs(num) let curr = -1 while (num > 0) { const nextCurr = num % 10 if (nextCurr == curr) return true curr = nextCurr num = Math.floor(num / 10) } return false }
about 4 years ago · Juan Pablo Isaza Denunciar

0

Use algunas expresiones regulares y luego verifique lo que se encontró a través del comparador

 numbers_match = /(00|11|22|33|44|55|66|77|88|99)/; numbers_match.match("11")

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/match

about 4 years ago · Juan Pablo Isaza Denunciar

0

La forma más fácil de ejecutar esto es mediante el uso de expresiones regulares. No estoy seguro de cuál sería la efectividad del algoritmo, pero la solución podría ser

/(\d)\1/

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