Cómo crear una lista correspondiente a cada número de 2 a 100 que contendrá los números de una matriz que son sus múltiplos?

Kshivani_sha:

Recientemente me encontré con esta pregunta y no podía entender por una solución óptima para él.

Supongamos que tenemos una serie de números de cualquier rango como 9, -3,0,4,11,2, -8, ..... Necesitamos imprimir números de 2 a 100 y que corresponden a cada uno de ellos necesitamos imprimir una lista de números de la matriz tal que el número de la matriz es divisible por ella. Ejemplo: Uso de la matriz existente en el ejemplo, 2 -> 4,2,-8,... 3 -> -3,9,... 4 -> 4,-8,...y como este hasta 100.

Probé la elaboración de la solución dividiendo cada número de la matriz por los números de 2 a 100 y, posteriormente, la creación de la lista correspondiente a cada uno de ellos. Pero eso no me parece una solución óptima.

Incluso he intentado agrupar los números como un número que es divisible por 8 será divisible por 2 y 4, de modo que no es necesario dividirla de nuevo. Esto reduciría algunas operaciones y complejidad, pero, a su vez, requiere la creación de tales grupos.

Por favor, puede ayudar a nadie encontrar una solución óptima para este problema reduciendo la necesidad de dividir cada número por 2 a 100.

Eritrea:

Para resolver el problema dado que elegiría uno de los dos métodos siguientes:

Versión 1

Dos bucles anidados simples en combinación con el método map.computeIfAbsent

int[] myArray = {3,5,1,-7,6,34,88,2,-8,9,10,4,33};
Map<Integer,List<Integer>> version1 = new HashMap<>();
for(int i = 2; i< 100; i++){
    for(int x : myArray){
        if(x%i==0)
           version1.computeIfAbsent(i, k -> new ArrayList<>()).add(x);
    }            
}
System.out.println(version1);

Versión 2

Una solución solamente con las operaciones de rutas

    Map<Integer,List<Integer>> version2 = Arrays.stream(myArray).distinct().boxed()
            .flatMap(p -> IntStream.range(2, 100).filter(i -> p%i ==0).boxed()
                    .map(l->new AbstractMap.SimpleEntry<>(l,p)))
            .collect(Collectors.groupingBy(Map.Entry::getKey,
                    Collectors.mapping(Map.Entry::getValue, Collectors.toList())));

    System.out.println(version2);

Es cierto que existen soluciones más elegantes o soluciones que son óptimas en términos de complejidad. Pero creo que los planteamientos que aquí son cortos y fáciles de leer.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=333486&siteId=1
Recomendado
Clasificación