tamaƱo recorrer programas matriz matrices enteros ejercicio dinamica cuadrada bidimensional arreglo array java arrays multidimensional-array contains

programas - recorrer arreglo bidimensional java



Compruebe si el valor existe en una matriz multidimensional java (3)

Creé una matriz de enteros 5x5 y se inicializó con el valor i * j. Exists método existente toma un número de fila y un valor para buscar.

private static Integer[][] myarray = new Integer[5][5]; public static boolean exists(int row, int value) { if(row >= myarray.length) return false; List<Integer> rowvalues = Arrays.asList(Arrays.asList(myarray).get(row)); if(rowvalues.contains(value)) return true; return exists(row+1, value); }

Sin un for loop , ¿hay alguna manera de ver si existe un valor en una multidimensional array ? encontré

Arrays.asList(*ArrayName*).contains(*itemToFind*)

pero eso solo buscará la primera dimensión de la matriz, y necesito buscar 2 dimensiones.


Sí.

Puede usar filtros Bloom ( http://en.wikipedia.org/wiki/Bloom_filter ) o crear un índice basado en árbol para las teclas de su Matriz, como un Trie ( http://en.wikipedia.org/wiki) / Trie )

Básicamente, necesitaría una estructura de datos para buscar los valores, y no las claves. No costaría mucho espacio o velocidad ya que podría reutilizar las referencias de los objetos de valor en ambas estructuras de datos (la suya y la que elija)


Puedes hacer casi cualquier cosa con recursividad si te molestas con su lógica. En este caso, no debería ser demasiado difícil

private boolean checkForValue(int val, int row, int col){ if(row == numRows && col == numCols) return false; else{ if(values[row][col] == val) return true else if(col < (numCols - 1)) checkForValue(val, row, col + 1); else checkForValue(val, row + 1, 1); } }

Sin embargo, si solo quieres ahorrar tiempo, creo que el ciclo for es bastante eficiente para comenzar

private boolean checkForValue(int val){ for(int i = 0; i < numRows; i++){ for(int j = 0; j < numCols; j++){ if(values[i][j] == val) return true; } } } return false;

Tampoco es demasiado duro.