arrays индекс - Поиск значения max / min в массиве примитивов с использованием Java




элемент максимальный (13)

Библиотека Google Guava имеет минимальные и максимальные методы в классах Chars, Ints, Longs и т. Д.

Поэтому вы можете просто использовать:

Chars.min(myarray)

Конверсии не требуются и, по-видимому, они эффективно реализованы.

Тривиально написать функцию для определения значения min / max в массиве, например:

/**
 * 
 * @param chars
 * @return the max value in the array of chars
 */
private static int maxValue(char[] chars) {
    int max = chars[0];
    for (int ktr = 0; ktr < chars.length; ktr++) {
        if (chars[ktr] > max) {
            max = chars[ktr];
        }
    }
    return max;
}

но разве это уже не сделано?


Использование Commons Lang (для преобразования) + Коллекции (до min / max)

import java.util.Arrays;
import java.util.Collections;

import org.apache.commons.lang.ArrayUtils;

public class MinMaxValue {

    public static void main(String[] args) {
        char[] a = {'3', '5', '1', '4', '2'};

        List b = Arrays.asList(ArrayUtils.toObject(a));

        System.out.println(Collections.min(b));
        System.out.println(Collections.max(b));
   }
}

Обратите внимание, что Arrays.asList() обертывает базовый массив, поэтому он не должен быть слишком интенсивным для памяти и не должен выполнять копию элементов массива.


Передайте массив методу, который сортирует его с помощью Arrays.sort() поэтому он сортирует только массив, который использует этот метод, затем устанавливает min в array[0] и max в array[array.length-1] .


Пример с поплавком:

public static float getMaxFloat(float[] data) {

    float[] copy = Arrays.copyOf(data, data.length);
    Arrays.sort(copy);
    return copy[data.length - 1];
}

public static float getMinFloat(float[] data) {

    float[] copy = Arrays.copyOf(data, data.length);
    Arrays.sort(copy);
    return copy[0];
}

Вот класс утилиты, предоставляющий методы min/max для примитивных типов: Primitives.java


import java.util.Random;

public class Main {

public static void main(String[] args) {
   int a[] = new int [100];
   Random rnd = new Random ();

    for (int i = 0; i< a.length; i++) {
        a[i] = rnd.nextInt(99-0)+0;
        System.out.println(a[i]);
    }

    int max = 0;          

    for (int i = 0; i < a.length; i++) {
        a[i] = max;


        for (int j = i+1; j<a.length; j++) {
            if (a[j] > max) {
               max = a[j];
            }

        }
    }

    System.out.println("Max element: " + max);
}
}

Основной способ получить минимальное / максимальное значение массива. Если вам нужен несортированный массив, вы можете создать копию или передать ее методу, который возвращает min или max. Если нет, отсортированный массив лучше, поскольку в некоторых случаях он работает быстрее.

public class MinMaxValueOfArray {
    public static void main(String[] args) {
        int[] A = {2, 4, 3, 5, 5};
        Arrays.sort(A);
        int min = A[0];
        int max = A[A.length -1];
        System.out.println("Min Value = " + min);        
        System.out.println("Max Value = " + max);
    }
}

Да, это сделано в классе Collections . Обратите внимание, что вам нужно будет преобразовать ваш примитивный массив символов в символ [] вручную.

Короткая демонстрация:

import java.util.*;

public class Main {

    public static Character[] convert(char[] chars) {
        Character[] copy = new Character[chars.length];
        for(int i = 0; i < copy.length; i++) {
            copy[i] = Character.valueOf(chars[i]);
        }
        return copy;
    }

    public static void main(String[] args) {
        char[] a = {'3', '5', '1', '4', '2'};
        Character[] b = convert(a);
        System.out.println(Collections.max(Arrays.asList(b)));
    }
}

    public int getMin(int[] values){
        int ret = values[0];
        for(int i = 1; i < values.length; i++)
            ret = Math.min(ret,values[i]);
        return ret;
    }

public static <T> T getMax(T[] data) {
    T[] copy = Arrays.copyOf(data, data.length);
    Arrays.sort(copy);
    return copy[data.length - 1];
}

public static <T> T getMin(T[] data) {
    T[] copy = Arrays.copyOf(data, data.length);
    Arrays.sort(copy);
    return copy[0];
}

** знать о возможных пустых аргументах args :) (см. handle null)

*** для примитива заменить T желаемым типом или использовать Arrays.asList ()


У меня есть небольшой вспомогательный класс во всех моих приложениях с такими методами, как:

public static double arrayMax(double[] arr) {
    double max = Double.NEGATIVE_INFINITY;

    for(double cur: arr)
        max = Math.max(max, cur);

    return max;
}

Вы можете легко сделать это с помощью IntStream и max() .

пример

public static int maxValue(final int[] intArray) {
  return IntStream.range(0, intArray.length).map(i -> intArray[i]).max().getAsInt();
}

объяснение

  1. range(0, intArray.length) Чтобы получить поток с таким количеством элементов, как в intArray .

  2. map(i -> intArray[i]) - map(i -> intArray[i]) каждый элемент потока с фактическим элементом intArray .

  3. max() - Получить максимальный элемент этого потока как OptionalInt .

  4. getAsInt() - getAsInt() . (Вы также можете использовать здесь: orElse(0) , на всякий случай, если OptionalInt пуст.)


У меня есть код, который работает для меня:

arr.sort((a, b) => a.name > b.name)

ОБНОВЛЕНИЕ: Не работает всегда, так что это неверно :(







java arrays algorithm frameworks