/ / Wie kann man nach Duplikaten in einem ganzen 2d-Array suchen? [Duplizieren] - Java, Arrays, Duplikate

Wie kann man nach Duplikaten in einem ganzen 2d-Array suchen? [Duplizieren] - Java, Arrays, Duplikate

Ich bin ein Anfänger-Programmierer, der nur Arrays lernt. Ich habe kürzlich 2D-Arrays gelernt und ich versuche herauszufinden, ob es ein Duplikat in einem 2D-Array gibt. Ich weiß, wie man überprüft, ob es ein Duplikat in derselben Spalte oder Zeile gibt, aber ich kann nicht herausfinden, wie man eine Zahl vergleicht, wenn sie nicht in der gleichen Spalte oder Zeile wie die Zahl ist, mit der ich sie vergleichen möchte. Hier ist mein Code ab sofort:

public static boolean correctNumbers(int[][] values) {
for (int i = 0; i < values.length; i++) {
for (int j = 0; j < values[i].length; j++) {
int num = values[i][j];
for (int k = j + 1; k < values.length; k++) {
if (num == values[i][k] || num > values.length * values.length || num < 1) {
return false;
}
}
for (int l = i + 1; l < values.length; l++) {
if (num == values[l][j] || num > values.length * values.length || num < 1) {
return false;
}
}
}
}

return true;
}

Ich muss eine Methode erstellen und ich kann keine anderen Methoden verwenden, um sie zu erstellen. Danke für die Hilfe!

Bearbeiten: Sie gibt false zurück, wenn im Array Duplikate vorhanden sind, eine Zahl im Array kleiner als 1 oder größer als die Gesamtzahl der Elemente im Array ist. Mit anderen Worten, diese Methode prüft, ob das Array alle Werte von 1 bis (i * j) im Array enthält. Mir wurde klar, dass ich diesen Teil schlecht erklärt hatte. Danke noch einmal!

Antworten:

0 für die Antwort № 1

Sie können die Logik vereinfachen, indem Sie die Zahlen in einem Hash-Set speichern und wenn Sie sie iterieren, prüfen Sie jedes, wenn es bereits vorhanden ist (dh doppelt), andernfalls fügen Sie es hinzu:

public static boolean correctNumbers(int[][] values) {
Set<Integer> set = new HashSet<>();
for (int i = 0; i < values.length; i++) {
for (int j = 0; j < values[i].length; j++) {
int num = values[i][j];
if (set.contains(num)) {
return false;
}
set.add(num);
}
}
return true;
}

BEARBEITEN

Wir können ein Array für die gleiche Funktionalität verwenden, die das hashset im obigen Code macht:

public static boolean correctNumbers(int[][] values) {
int n = values.length;
int[] dict = new int[n * n + 1];
for (int i = 0; i < n; i++) {
for (int j = 0; j < values[i].length; j++) {
int num = values[i][j];
if (num < 1 || num > n || dict[num] != 0) {
return false;
}
dict[num] = 1;
}
}
return true;
}