Java am Meisten vorkommende Zahl samt Index im Array bekommen?
Ich komme leider nicht weiter. Ich habe ein int[ ] numbers, aus diesem möchte ich die Zahl herausfinden, die am häufigsten vorkommt. Und ich will wissen wo im Array (welcher Index) diese Zahl überall steht.
int mostCom = 0;
String posOfmostCom = "";
int counter = 1;
for (int i = 0; i < numbers.length; i++) {
int tempMostCom = numbers[i];
String tempPosOfmostCom = "";
int tempCounter = 1;
for (int j = 0; j < numbers.length; j++) {
if (tempMostCom == numbers[j]) {
tempPosOfmostCom += numbers[j];
tempCounter++;
}
}
if (tempCounter > counter) {
counter = tempCounter;
posOfmostCom = tempPosOfmostCom;
tempMostCom = mostCom;
}
}
Vielen Dank im Vorhinen für die Hilfe!
3 Antworten
int[] numbers = {1, 1, 1, 1, 1, 5, 4, 3, 6};
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
int max = 0;
int maxIndex = 0;
for (int i :numbers) {
int value = 0;
if (map.containsKey(i)) value = map.get(i) + 1;
map.put(i, value);
if (max < value) {
max = value;
maxIndex = i;
}
}
ArrayList<Integer> positions = new ArrayList<Integer>();
for (int i = 0; i < numbers.length; i++) {
if (numbers[i] == maxIndex) {
positions.add(i);
}
}
System.out.println("max is" + maxIndex + " at pos: " + positions);
Danke :) Gibt es auch eine Möglichkeit, dass mit Arrays zu lösen? Ich weis HashMaps und ArrayListen sind schöner aber normale Arrays sind doch eigentlich minimal schneller oder? und ich mag die normalen mehr ^^
Vielen Dank nochmal... werde mein Beispiel gleich umbauen
Bei meiner Lösung haste 2n Durchläufe, bei Dir war es eine Verschachtelung O=2n gegen O = n*n ohne Map. Du kannst die ArrayList ja wieder durch Deinen String ersetzen, den musst Du aber parsen, wenn du ihn auswerten willst.
Versuch es mit einem Hashtable,
ich hatte dadurch die meist genutzte Farbe eines Bildes mit der Dimension 2048x2048 determinieren können.
Nutze für solches ein Array.. ist schneller:
http://dotnet-snippets.de/snippet/methode-zur-determinierung-der-meist-genutzten-farbe/10014
Oder:
Du erzeugst zwei Variablen vom Typ int.
MaxNumber und Index.
Nun iterierst durch das Array, mit einem If Klausel prüfst du, ob die Zahl des Index i großer ist als MaxNumber, wenn ja, dann ist MaxNumber die Zahl des Index i und Index ist i.
So könnte es funktionieren ;-)