Подтвердить что ты не робот

Как найти минимальное значение в ArrayList вместе с номером индекса? (Ява)

Мне нужно получить значение индекса минимального значения в моем arraylist в Java. У моего arraylist есть несколько поплавков, и я пытаюсь подумать о том, как я могу получить индексный номер самого маленького float, чтобы я мог использовать этот индексный номер в другом месте моего кода. Я новичок, поэтому, пожалуйста, не ненавидите меня. Спасибо!

4b9b3361

Ответ 1

Вы можете использовать Collections.min и List.indexOf:

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

Если вы хотите пересечь список только один раз (это может пройти дважды):

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;
}

Ответ 2

Это должно быть сделано с использованием встроенных функций.

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

Ответ 3

попробуйте следующее:

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;
}

Ответ 4

Существует более простой способ найти минимальное целое число в списке массивов:

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

Ответ 5

Вот что я делаю. Сначала я нахожу минимум, затем, после того, как минимум найден, он удаляется из ArrayList.

ArrayList<Integer> a = new ArrayList<>();
a.add(3);
a.add(6);
a.add(2);
a.add(5);

while (a.size() > 0) {
    int min = 1000;
    for (int b:a) {
        if (b < min)
            min = b;
    }
    System.out.println("minimum: " + min);
    System.out.println("index of min: " + a.indexOf((Integer) min));
    a.remove((Integer) min);
}

Ответ 6

Вам нужно пройти весь массив и сохранить два вспомогательных значения:

  • Минимальное значение, которое вы найдете (на вашем пути к концу)
  • Индекс места, где вы нашли минимальное значение

Предположим, что ваш массив называется myArray. В конце этого кода minIndex имеет индекс наименьшего значения.

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;
   }
}

Это предполагает худший сценарий: полностью случайный массив. Это алгоритм O (n) или алгоритм ордера n, что означает, что если у вас есть n элементов в вашем массиве, вы должны просмотреть их все, прежде чем знать свой ответ. O (n) алгоритмы являются наихудшими, потому что они занимают много времени, чтобы решить проблему.

Если ваш массив отсортирован или имеет какую-либо другую определенную структуру, тогда алгоритм может быть оптимизирован быстрее.

Сказав это, хотя, если у вас нет огромного массива тысяч значений, не беспокойтесь об оптимизации, так как разница между алгоритмом O (n) и более быстрой не будет заметна.