首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Java 陣列尋找最大值與最小值:標準演算法與邊界處理

     編輯:Java 程式設計入門

核心演算法:單次遍歷 O(n)

/** 回傳陣列最大值 */
public static int getMaxNum(int[] arr) {
    if (arr == null || arr.length == 0) 
        throw new IllegalArgumentException("陣列不能為空");
    int maxIdx = 0;
    for (int i = 1; i < arr.length; i++) {
        if (arr[i] > arr[maxIdx]) maxIdx = i;
    }
    return arr[maxIdx];
}

/** 回傳陣列最小值 */
public static int getMinNum(int[] arr) {
    if (arr == null || arr.length == 0) 
        throw new IllegalArgumentException("陣列不能為空");
    int minIdx = 0;
    for (int i = 1; i < arr.length; i++) {
        if (arr[i] < arr[minIdx]) minIdx = i;
    }
    return arr[minIdx];
}

關鍵點解析

細節說明
初始索引設 0假設首元素為極值,從索引 1 開始比較,減少一次判斷
回傳值而非索引直接回傳 arr[maxIdx],呼叫端更直觀
空陣列防禦拋出 IllegalArgumentException,避免 ArrayIndexOutOfBounds
單次遍歷若需同時求最大最小,可合併循環,比較次數約減少 25%

合併版:單次遍歷求最大最小

public static int[] getMinMax(int[] arr) {
    if (arr == null || arr.length == 0) throw new IllegalArgumentException("空陣列");
    int min = arr[0], max = arr[0];
    for (int i = 1; i < arr.length; i++) {
        if (arr[i] < min) min = arr[i];
        else if (arr[i] > max) max = arr[i]; // else if 略減比較
    }
    return new int[]{min, max};
}

現代 API 替代方案

// Java 8 Stream
int max = Arrays.stream(arr).max().orElseThrow();
int min = Arrays.stream(arr).min().orElseThrow();

// 並行流(大陣列)
int max = Arrays.stream(arr).parallel().max().orElseThrow();

擴展:泛型版支援 Comparable

public static <T extends Comparable<T>> T max(T[] arr) {
    if (arr == null || arr.length == 0) throw new IllegalArgumentException();
    T max = arr[0];
    for (int i = 1; i < arr.length; i++) 
        if (arr[i].compareTo(max) > 0) max = arr[i];
    return max;
}

測試用例

public static void main(String[] args) {
    int[] a = {3, -1, 7, 7, 0, 42, -5};
    System.out.println("Max: " + getMaxNum(a)); // 42
    System.out.println("Min: " + getMinNum(a)); // -5
    System.out.println("MinMax: " + Arrays.toString(getMinMax(a))); // [-5, 42]
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved