Ich arbeite an Spielautomaten und stand vor dem Problem der Ergebnisse zu sammeln. Frage ist, was ist der schnellste Ansatz, um Indizes von doppelten Werten im 2D-int-Array zu sammeln? Bedingung ist hier nur idexes von Werten zu sammeln, die auftreten 5 malCollect Indizes von Duplikaten Werte in 2D-Int-Array-Algorithmus
CASE 1
Eingang (erhalten Indizes von Wert only):
int[][] input = new int[][]{
new int[]{1, 2, 3, 4, 8},
new int[]{6, 3, 2, 3, 5},
new int[]{3, 9, 7, 1, 3}
};
erwartete Ausgabe:
[2, 1, 0, 1, 2]
CASE 2
Eingang (erhalten Indizes von und Werte nur):
int[][] input = new int[][]{
new int[]{1, 5, 3, 5, 8},
new int[]{5, 3, 5, 3, 5},
new int[]{3, 9, 7, 1, 3}
};
erwartete Ausgabe:
[2, 1, 0, 1, 2] //for 3 value
[1, 0, 1, 0, 1] //for 5 value
meine Lösung (seine sehr schlecht)
1) sammeln Duplikate (diese nicht für CASE Arbeits 2)
Map<Integer, Integer> amountMap = new HashMap<>();
for (int[] row : railSpin) {
for (int value : row) {
amountMap.put(value, amountMap.containsKey(value) ? amountMap.get(value) + 1 : 1);
}
}
2) entfernen nicht 5 Spiele
if (amountMap.containsValue(5)) {
Iterator<Integer> amountIterator = amountMap.values().iterator();
while (amountIterator.hasNext()) {
if (amountIterator.next() != 5) {
amountIterator.remove();
}
}
}
3) iterieren Kopf nach unten und sammeln Indizes
List<Integer> indexes = new ArrayList<>();
for (int row = 0; row < 5; row++) {
for (int col = 0; col < railSpin.length; col++) {
int valueToCheck = railSpin[col][row];
if (amountMap.keySet().contains(valueToCheck)) {
indexes.add(col);
}
}
}
4) Split-Array bei Bedarf
List<List<Integer>> splitResults = new ArrayList<>();
for (int start = 0; start < indexes.size(); start += 5) {
int end = Math.min(start + 5, indexes.size());
List<Integer> sublist = indexes.subList(start, end);
splitResults.add(new ArrayList<>());
splitResults.get(start /5).addAll(sublist);
}
Können Sie eine Lösung ohne so viele Iterationen vorschlagen, die für CASE 2 geeignet wäre? Ich glaube in Kraft der Stackoverflow
Ich gehe davon aus 2D-Array mit fester Größe 5 von 3 ist, nicht wahr? Auch die Zahlen liegen im Bereich von 1 bis 9? – dasblinkenlight
@dasblinkenlight das ist richtig. Obwohl ich versuche, vielseitigen Algorithmus für 5x3 und 3x3 2D-Arrays zu erstellen. Die Höhe ist konstant, aber die Breite könnte abweichen – AnZ