Java am Meisten vorkommende Zahl samt Index im Array bekommen?

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);
Zebbinho  27.11.2015, 00:51

So könnte es funktionieren ;-)

0
derZERLEGER 
Fragesteller
 27.11.2015, 00:58
@Zebbinho

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

0
Zebbinho  27.11.2015, 01:04
@derZERLEGER

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.

0

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.