配列の最大値を見つける5つの方法

たとえば、会社の従業員の最高給与、クラスの最高学年、または面接で最大値を見つける問題を照会する場合、この記事では、配列の最大値を照会する5つの方法をリストします。

1.Forループ方式

forループメソッドは手動で最大値を定義し、ループ比較を実行します。配列の要素が最大値より大きい場合は、この配列要素を最大値として使用します。
たとえば、定義された最大値は0です。ループを開始します。配列の添え字は0です。最初の要素2は0より大きいです。このとき、2が最大値として使用され、以下同様に続きます。ループが終了すると、最大値が検出されます。

 public static void main(String[] args) {
    
    
 		int[] arr = {
    
    2, 8, 19, 3, 98, 12};
        int max = findArrayMax_value(arr);
        System.out.println("最大值:" + max);
}
 public static int findArrayMax_value(int[] arr) {
    
    
 		//手动定义一个最大值
        int max = 0;
        //循环遍历
        for (int ele : arr) {
    
    
        //判断数组中每一个元素和最大值的关系
           if (ele > max){
    
    
           //如果数组元素大 就赋值给max
              max = ele;
           }
        }
		=============== 一般使用增强for循环 =======================
        for (int i = 0; i < arr.length; i++) {
    
    
            if (arr[i] > max) {
    
    
                max = arr[i];
            }
        }

        return max;
    }

結果:最大:98

2.再帰的方法

再帰を使用するには、初期位置と終了位置の2つの位置を定義する必要があります。初期位置の値が終了位置の値より大きい場合、終了位置は1つ前に移動して、通話を続行します。初期位置の値が終了位置の値よりも小さい場合、初期位置は1位置後方に移動され、呼び出しが続行されます。 たとえば、初期位置と終了位置が一致するまで 、次のようになります。配列の初期位置は添え字0になり、arr.length-1の終了位置添え字の6番目の要素は、この時点での初期位置の値を比較します。これは終了位置の値よりも小さいため、ステートメントmaxを実行します。= arr [last]は、メソッドの呼び出しを続行します。今回は、呼び出しの正式なパラメーターが変更されます。これは、2番目の要素と終了位置の値である必要があるため、初期位置は1ビット後方に移動します。
 public static void main(String[] args) {
    
    
 		int[] arr = {
    
    2, 8, 19, 3, 98, 12};
 		//实参分别是数组、初始位置、结束位置、最大值
         int max2 = findArrayMax_value2(arr, 0, arr.length - 1, max);
		 System.out.println("最大值:" + max2);
}

 public static int findArrayMax_value2(int[] arr, int head, int last, int max) {
    
    
 		//初始位置与结束位置相等
        if (arr[head] == arr[last]) {
    
    
            return max;
        } else {
    
    
        	//初始位置大于结束位置
            if (arr[head] > arr[last]) {
    
    
            	//arr[head]赋值给max
                max = arr[head];
                //继续执行方法 此时结束位置应该向前移一位 继续和初始位置的值比较
                return findArrayMax_value2(arr, head, last - 1, max);
            } else {
    
    
            	//如果初始位置小于结束位置 arr[last]赋值给max
                max = arr[last];
                //继续执行方法 此时初始位置应该向后移一位,继续和结束位置的值比较
                return findArrayMax_value2(arr, head + 1, last, max);
            }
        }
    }

結果:最大:98

3.Arrays.sort()メソッド

Arrays.sortメソッドは、配列を小さいものから大きいものに並べ替えることができます。並べ替えが完了すると、最後の桁の値が最大値になります。実装コードは次のとおりです。


 public static void main(String[] args) {
    
    
 		int[] arr = {
    
    2, 8, 19, 3, 98, 12};
         int max3= findArrayMax_value2(arr);
		 System.out.println("最大值:" + max3);
 } 
    public static int findArrayMax_value3(int[] arr) {
    
    
        /**
         * 源码:
         * public static void sort(int[] a) {
         * 			//定义初始位置和结束位置
         *         DualPivotQuicksort.sort(a, 0, a.length - 1, null, 0, 0);
         * }
         */

        //返回的是一个升序的数组
        Arrays.sort(arr);
        //返回结束位置 也就是最大值
        return arr[arr.length - 1];
    }

コアセンテンス

for (int i = left, j = i; i < right; j = ++i) {
    
    
            int ai = a[i + 1];
            while (ai < a[j]) {
    
    
                a[j + 1] = a[j];
                if (j-- == left) {
    
    
                    break;
                }
            }
            a[j + 1] = ai;
 }

結果:最大:98

4.ストリーム

JDK1.8の新機能はStreamを導入し、Streamの作成、中間操作、および操作の終了の
3つのステップでStreamを簡単に使用できます。


 public static void main(String[] args) {
    
    
 		int[] arr = {
    
    2, 8, 19, 3, 98, 12};
         int max4= findArrayMax_value2(arr);
		 System.out.println("最大值:" + max4);
 } 
 public static int findArrayMax_value4(int[] arr) {
    
    
        return Arrays.stream(arr).max().getAsInt();
 }

結果:最大:98

5.Collections.max()

コレクションコレクションツールクラスを使用して最大値と最小値を見つけることもできますが、使用する前に配列(配列)をコレクション(リスト)に変換する必要があります。実装コードは次のとおりです:
org.apacheを使用します。 commons.lang3.ArrayUtils.toObject。次の依存関係をインポートします

  <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.5</version>
  </dependency>
 public static void main(String[] args) {
    
    
 		int[] arr = {
    
    2, 8, 19, 3, 98, 12};
         int max5= findArrayMax_value2(arr);
		 System.out.println("最大值:" + max5);
 } 
 public static int findArrayMax_value5(int[] arr) {
    
    
        List<Integer> list = Arrays.asList(org.apache.commons.lang3.ArrayUtils.toObject(arr));
        return Collections.max(list);
 }

結果:最大:98

コードを簡潔に操作するには、streamメソッドを使用することをお勧めします

おすすめ

転載: blog.csdn.net/lirui1212/article/details/109121743