arrays for 最大値 - Javaを使用したプリミティブの配列における最大/最小値の検索





7 Answers

Google Guavaライブラリには、Chars、Ints、Longsなどのクラスにminおよびmaxメソッドがあります。

だからあなたは単純に使うことができます:

Chars.min(myarray)

コンバージョンは必要なく、おそらく効率的に実装されています。

最高 求める 乱数

以下のような配列の最小値/最大値を決定する関数を書くのは簡単です:

/**
 * 
 * @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;
}

これはすでにどこかで行われていませんか?




はい、 Collectionsクラスで行われていCollections 。 プリミティブのchar配列をCharacter []に手動で変換する必要があることに注意してください。

短いデモ:

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 static double arrayMax(double[] arr) {
    double max = Double.NEGATIVE_INFINITY;

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

    return max;
}



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メソッドを提供するユーティリティクラスです: Primitives.java




配列の最小値/最大値を取得する基本的な方法。 ソートされていない配列が必要な場合は、コピーを作成するか、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);
    }
}



ここでは、実行の約99%で最大値を得るためのソリューションです(より良い結果を得るために0.01を変更してください)。

public static double getMax(double[] vals){
    final double[] max = {Double.NEGATIVE_INFINITY};

    IntStream.of(new Random().ints((int) Math.ceil(Math.log(0.01) / Math.log(1.0 - (1.0/vals.length))),0,vals.length).toArray())
            .forEach(r -> max[0] = (max[0] < vals[r])? vals[r]: max[0]);

    return max[0];
}

(完全に深刻ではない)




Related