es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo contar duplicados y cambiar los valores de una Lista en UN solo bucle for?

Estoy tratando de contar todos los números duplicados en la lista de mi código. Además, la lista debería compararse con un conjunto; si hay una coincidencia, el valor respectivo debería ser reemplazado por otro.

Logré programar correctamente, pero ¿puedes hacerlo en un solo bucle for? Si lo hago en el mismo bucle, el mapa siempre obtiene el valor incorrecto porque los valores siempre se sobrescriben.

Aquí está mi código:

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para obtener el código en un solo bucle for, primero puedes crear un mapa para almacenar la frecuencia de cada elemento en la lista de entrada mientras la recorres en un bucle. Al mismo tiempo, puedes comprobar si el elemento está en el conjunto de números y reemplazarlo por el nuevo número si lo está. Aquí tienes un ejemplo de implementación:

    public static Map<integer, integer=""> replace(List<integer> inputList, Set<integer> numberSet, Integer newNumber) {
        Map<integer, integer=""> map = new HashMap<>();
    
        for (int i = 0; i < inputList.size(); i++) {
            int curr = inputList.get(i);
            if (numberSet.contains(curr)) {
                inputList.set(i, newNumber);
            }
            map.put(curr, map.getOrDefault(curr, 0) + 1);
        }
    
        return map;
    }
    

    Esta implementación primero verifica si el elemento actual está en el conjunto de números y, si lo está, lo reemplaza por el nuevo número usando el método set() de inputList. Al mismo tiempo, mete la frecuencia del elemento actual en el mapa usando el método put() y el método getOrDefault() para manejar casos en los que el elemento aún no está en el mapa. Al hacerlo todo en un solo bucle for, debería ser más eficiente que usar bucles separados.</integer,></integer,>

Comments are closed.