¿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.
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:
En el método
enVector()
, estamos utilizando el métodoArrays.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 enmatriz1
. Si algún elemento no se encuentra enmatriz2
, establecemostodosPertenecen
enfalse
y salimos del ciclo. Finalmente, devolvemostodosPertenecen
.Podemos utilizar este método para verificar si
matriz1
está presente enmatriz2
llamando a:Así, podemos verificar si todos los elementos de
matriz1
están presentes enmatriz2
.