Frage von derZERLEGER, 37

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!

Antwort
von Zebbinho, 37
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);
Kommentar von Zebbinho ,

So könnte es funktionieren ;-)

Kommentar von derZERLEGER ,

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

Kommentar von Zebbinho ,

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.

Antwort
von thenapmanx, 27

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.

Antwort
von thenapmanx, 25

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...

Keine passende Antwort gefunden?

Fragen Sie die Community