Algoritmos notables: Eliminar elementos duplicados
Algoritmo muy útil que podrás aplicarlo en entrevistas técnicas y además mejorará tu lógica 🧠

En esta oportunidad resolveremos un algoritmo sencillo, pero por el mismo hecho de sencillo muchos developers se confían y no lo practicas, entonces llegado el momento se topan con un block o por los nervios en plena entrevista perdiendo tiempo u oportunidades de empleo.

Pero eso será cosa del pasado para ti, así que comencemos.

Este algoritmo aquí lo desarrollo de forma completa utilizando C# sin embargo en este post anterior lo hice con Javascript también por si quieras verlo 😉

Enunciado

Dado una arreglo de elementos, puede ser un arreglo de enteros o de cadenas de texto, eliminar todos los elementos duplicados y retornar valores únicos.

Por ejemplo:

Dado el arreglo:

x = [1,2,2,3,4,5,6,7,7,5]

Retornar:

[1,2,3,4,5,6,7]

Dado el arreglo:

y = ["gerson", "yasmin", "ana", "tefy", "lucho", "gerson", "rosa", "yasmin"]

Retornar:

["gerson", "yasmin", "ana", "tefy", "lucho", "rosa"]

Estrategias

Existen al menos 3 estrategias para resolver este problema:

  • Usando Linq
  • Fuerza bruta con iteraciones
  • Utilizando estructuras de datos

Vamos a resolverlo con las tres estrategias para practicar nuestras destrezas con el código y al final diré cuál es la más conveniente.

Linq

        public int[] UniqueNumbersLinq(int[] arreglo)
        {
            return arreglo.Distinct().ToArray();
        }

Iteración: For

        public int[] UniqueNumbersIteration(int[] arreglo)
        {
            var response = new List<int>();

            for (int i = 0; i < arreglo.Length; i++)
            {
                if(!response.Contains(arreglo[i]))
                    response.Add(arreglo[i]);
            }
            return response.ToArray();
        }

Estructura de datos: HashSet

        public int[] UniqueNumbersHashSet(int[] arreglo)
        {
            HashSet<int> result = new HashSet<int>(arreglo);
            return result.ToArray();
        }

Aquí hice la prueba con enteros, pero podría alterar el tipo y también trabajaría con cadenas 😉

Pongámoslo a prueba

Entonces en un programa de consola, probaré cualquiera de ellos y obtengo:

Y el resultado es el siguiente:

Para probar tuve que hacer al método estático, por eso no lo instancié en Main. 😉

Conclusiones

Las tres estrategias funcionan, sin embargo hay que elegir una y en lo personal aprovecharía el potencial que nos otorgan las estructuras de datos, y por ello me iría por la tercera opción, la de utilizar HashSet.

En segundo lugar utilizaría Linq y como último recurso la iteración con la cláusula For.

Existe una forma de hacer a una clase más dinámica y permitir que sus métodos trabajen con distintos tipos tanto en sus parámetros de entrada como de retorno. Eso se llama Generics, en una entrada más adelante hablaré de esto.

Recuerda que esta entrada es de la serie de artículos Algoritmos notables, los cuales los subo a este repo, puedes visitarlo y descubrir más algoritmos 😊

Si esta entrada te ha gustado te invito a compartirla crack! 😊

Un comentario en «Algoritmos notables: Eliminar elementos duplicados»

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *