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 puedo verificar si dos matrices 2D simples tienen las mismas matrices 1D? (El orden y las repeticiones no importan)

Mi objetivo principal es devolver si todos los elementos, int[], de una matriz 2D, int[][], están presentes en otra matriz 2D.

Ya intenté usar Arrays.deepEquals() pero en este caso, el orden de los elementos importaría y ese no es el propósito.

  • Las matrices int[][] no serían más largas que 15, por ejemplo.
  • Las matrices int[][] siempre tienen la misma longitud.
  • El orden de las matrices int[][] no importa, pero el de las matrices int[] sí.
  • Las matrices int[] siempre estarían emparejadas.

Resultado esperado:

int[][] array1 = {{1, 2}, {2, 2}, {0, 1}, {3,4}} // Matriz principal

int[][] array2 = {{0, 1}, {2, 2}, {3,4} {1, 2}}} // Resultado esperado: true

int[][] array3 = {{6, 3}, {1, 2}, {7,4} {0, 1}}} // Resultado esperado: false

Esta es mi solución/intento:

// Comprobar si una matriz int[] (elemento) pertenece a una matriz int[][].
public static boolean enVector(int[][] matriz2D, int[] matriz1D) {

for (int i = 0; i < matriz2D.length; i++) {
    for (int j = 0; j < matriz2D[i].length; j++) {

        if (matriz1D[0] == matriz2D[i][0] && matriz1D[1] == matriz2D[i][1]) {
            return true;
        }
    }
}

return false;

}

// Comprobar si todas las matrices int[] de una matriz int[][] pertenecen a otra matriz int[][].
// Esto no está funcionando correctamente.
public boolean todosPertenecen() {

boolean pertenece = false;

for (int i = 0; i < array1.length; i++) {

 if (enVector(array1, array2()[i])) {
    pertenece = true;
 }

 else {
    pertenece = false;
 }

}

return pertenece;

}

EDICIÓN: Resolví el problema invirtiendo la lógica de la solución. Publicaré mi respuesta.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Solución

    Para comprobar si todos los elementos de una matriz bidimensional (2D) están presentes en otra matriz bidimensional (2D), podemos iterar a través de cada elemento de la primera matriz y verificar si existe en la segunda matriz utilizando un método auxiliar llamado enVector(). Podemos almacenar el resultado en una variable booleana y devolverla.

    El método enVector() toma dos entradas: una matriz bidimensional (2D) y una matriz unidimensional (1D). Verifica si la matriz unidimensional está presente en la matriz bidimensional y devuelve un valor booleano.

    Aquí está la implementación correcta de ambos métodos:

    public static boolean enVector(int[][] matriz2D, int[] matriz1D) {
        for (int i = 0; i < matriz2D.length; i++) {
            if (Arrays.equals(matriz2D[i], matriz1D)) {
                return true;
            }
        }
        return false;
    }
    
    public static boolean todosPertenecen(int[][] matriz1, int[][] matriz2) {
        boolean todosPertenecen = true;
        for (int i = 0; i < matriz1.length; i++) {
            if (!enVector(matriz2, matriz1[i])) {
                todosPertenecen = false;
                break;
            }
        }
        return todosPertenecen;
    }
    

    En el método enVector(), estamos utilizando el método Arrays.equals() para verificar si la matriz unidimensional coincide con algún elemento de la matriz bidimensional. Este método no considera el orden de los elementos.

    En el método todosPertenecen(), iteramos sobre cada elemento en matriz1. Si algún elemento no se encuentra en matriz2, establecemos todosPertenecen en false y salimos del ciclo. Finalmente, devolvemos todosPertenecen.

    Podemos utilizar este método para verificar si matriz1 está presente en matriz2 llamando a:

    int[][] matriz1 = {{1, 2}, {2, 2}, {0, 1}, {3,4}};
    int[][] matriz2 = {{0, 1}, {2, 2}, {3,4}, {1, 2}};
    boolean todosPertenecen = todosPertenecen(matriz1, matriz2);
    System.out.println(todosPertenecen); // imprime true
    
    int[][] matriz1 = {{6, 3}, {1, 2}, {7,4}, {0, 1}};
    int[][] matriz2 = {{0, 1}, {2, 2}, {3,4}, {1, 2}};
    boolean todosPertenecen = todosPertenecen(matriz1, matriz2);
    System.out.println(todosPertenecen); // imprime false
    

    Así, podemos verificar si todos los elementos de matriz1 están presentes en matriz2.

Comments are closed.