Wie finde ich den Mindestwert in einer ArrayList zusammen mit der Indexnummer? (Java)

Lesezeit: 2 Minuten

Ich muss den Indexwert des Mindestwerts in meiner Arrayliste in Java abrufen. MEINE Arrayliste enthält mehrere Gleitkommazahlen, und ich versuche, mir einen Weg auszudenken, wie ich die Indexnummer der kleinsten Gleitkommazahl erhalten kann, damit ich diese Indexnummer an anderer Stelle in meinem Code verwenden kann. Ich bin ein Anfänger, also bitte hassen Sie mich nicht. Vielen Dank!

  • Ich denke, die gewählte Lösung ist unvollständig. es fehlt noch etwas! Was ist, wenn die Mindestzahl mehrmals vorhanden ist? Es ist schließlich eine Liste. Ich denke also, es sollte eine Liste zurückgeben, wenn Indizes für den Mindestwert

    – Adel Boutros

    10. August 2013 um 19:37 Uhr

Benutzer-Avatar
Marimuthu Madasamy

Sie können verwenden Sammlungen.min und Liste.indexOf:

int minIndex = list.indexOf(Collections.min(list));

Wenn Sie die Liste nur einmal durchlaufen möchten (das obige kann sie zweimal durchlaufen):

public static <T extends Comparable<T>> int findMinIndex(final List<T> xs) {
    int minIndex;
    if (xs.isEmpty()) {
        minIndex = -1;
    } else {
        final ListIterator<T> itr = xs.listIterator();
        T min = itr.next(); // first element as the current minimum
        minIndex = itr.previousIndex();
        while (itr.hasNext()) {
            final T curr = itr.next();
            if (curr.compareTo(min) < 0) {
                min = curr;
                minIndex = itr.previousIndex();
            }
        }
    }
    return minIndex;
}

  • Ihrer Lösung fehlt noch etwas! Was ist, wenn die Mindestzahl mehrmals vorhanden ist? Es ist schließlich eine Liste. Also denke ich, dass Sie eine Liste zurückgeben sollten, wenn Indizes für den Mindestwert

    – Adel Boutros

    10. August 2013 um 19:37 Uhr

  • @AdelBoutros Wenn das OP das möchte, kann diese Lösung als Ausgangspunkt genommen und verbessert werden.

    – Marimuthu Madasamy

    10. August 2013 um 19:55 Uhr

  • @MarimuthuMadasamy Danke Bruder..du bist der Held..,master maind

    – Gowthaman M

    12. Januar 2018 um 10:03 Uhr


  • Iteriert das die Liste nicht zweimal?

    – Varun Garg

    14. Juli 2018 um 13:33 Uhr

Dies sollte es mit eingebauten Funktionen tun.

public static int minIndex (ArrayList<Float> list) {
  return list.indexOf (Collections.min(list)); }

Versuche dies:

public int getIndexOfMin(List<Float> data) {
    float min = Float.MAX_VALUE;
    int index = -1;
    for (int i = 0; i < data.size(); i++) {
        Float f = data.get(i);
        if (Float.compare(f.floatValue(), min) < 0) {
            min = f.floatValue();
            index = i;
        }
    }
    return index;
}

  • Float.compare(f.floatValue(), min) < 0 kann geändert werden f < min. Und min = f.floatValue() zu min = f. Wrapper-Klassen werden implizit in ihre primitiven Äquivalente umgewandelt.

    – Bernhard Barker

    14. April 2013 um 3:44 Uhr


  • @Dukeling, meinst du f<=min?

    – BlackJoker

    14. April 2013 um 3:49 Uhr

  • Nein, ich meine f < min (aus den Dokumenten von Float.compare: “gibt den Wert 0 zurück, wenn f1 numerisch gleich f2 ist; einen Wert kleiner als 0, wenn f1 numerisch kleiner als f2 ist; und einen Wert größer als 0, wenn f1 numerisch größer als f2 ist”). Wenn nicht Sie bedeuten Float.compare(f.floatValue(), min) <= 0 (welches sein würde f <= min).

    – Bernhard Barker

    14. April 2013 um 3:53 Uhr


  • Das Delegieren von @Dukeling an Float.compare vermeidet ein fehlerhaftes Verhalten beim Vergleichen von NaN

    – BlackJoker

    14. April 2013 um 4:06 Uhr


Es gibt eine einfachere Möglichkeit, eine minimale Ganzzahl in der Array-Liste zu finden:

int min = array.get(0);
        for (int i : array){
            min = min < i ? min : i;
        }

public static int minIndex (ArrayList<Float> list) {
  return list.indexOf (Collections.min(list));
 }
System.out.println("Min = " + list.get(minIndex(list));

Benutzer-Avatar
Syscall

  1. Deklarieren Sie eine Arrayliste mit Floats.

  2. Collection.min() – Finden des kleinsten Elements in der Liste.

  3. List.indexOf() – Finden des Index des minimalen Elements.

public class Test {

    public static void main(String[] args) {

        ArrayList<Float> ary = new ArrayList<Float>();
        ary.add((float) 3.0);
        ary.add((float) 6);
        ary.add((float) 2);
        ary.add((float) 1.3);
        ary.add((float) 4.2);
        int indx = minIndex(a);
        System.out.println(indx);
    }

    public static int minIndex(ArrayList<Float> list) {
        return list.indexOf(Collections.min(list));
    }

}

Benutzer-Avatar
hochnäsig

Sie müssen das gesamte Array durchlaufen und zwei Hilfswerte beibehalten:

  • Der minimale Wert, den Sie finden (auf dem Weg zum Ende)
  • Der Index der Stelle, an der Sie den Mindestwert gefunden haben

Angenommen, Ihr Array wird aufgerufen meinArray. Am Ende dieses Codes minIndex hat den Index mit dem kleinsten Wert.

var min = Number.MAX_VALUE; //the largest number possible in JavaScript
var minIndex = -1;

for (int i=0; i<myArray.length; i++){
   if (myArray[i] < min){
      min = myArray[i];
      minIndex = i;
   }
}

Dies setzt das Worst-Case-Szenario voraus: ein völlig zufälliges Array. Es ist ein O(n)-Algorithmus oder Bestellung n Algorithmus, was bedeutet, dass, wenn Sie haben n Elemente in Ihrem Array, dann müssen Sie sich alle ansehen, bevor Sie Ihre Antwort wissen. O(n)-Algorithmen sind die schlechtesten, weil sie viel Zeit brauchen, um das Problem zu lösen.

Wenn Ihr Array sortiert ist oder eine andere spezifische Struktur hat, kann der Algorithmus optimiert werden, um schneller zu sein.

Allerdings sollten Sie sich keine Gedanken über die Optimierung machen, es sei denn, Sie haben ein riesiges Array mit Tausenden von Werten, da der Unterschied zwischen einem O (n) -Algorithmus und einem schnelleren nicht bemerkbar wäre.

1136920cookie-checkWie finde ich den Mindestwert in einer ArrayList zusammen mit der Indexnummer? (Java)

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy