在 Java 中查找第三小的數字:完整指南

已發表: 2023-08-23

您是否想知道如何有效地找到數組、列表或整數流中第三小的數字? 在這篇博文中,我們將深入 Java 編程世界,並探索用於識別各種數據源中第三小的數字的不同技術。

在 Java 中查找第三小的數字 - 綜合指南

在進行數據操作和分析時,經常需要識別數字集合中的特定元素。 找到最小或最大的數字相對簡單,但確定第三小的數字需要更多的技巧。 在這篇博文中,我們將介紹使用 Java 解決此問題的三種方法:對數組進行排序、對列表進行排序以及利用流。

方法一:對數組進行排序

數組是 Java 中的基本數據結構之一,使它們成為我們探索的自然起點。 這裡的想法是按升序對數組進行排序,然後檢索索引 2 處的元素。

方法 2:對列表進行排序

列表為數組提供了更靈活的替代方案,允許動態調整大小和更輕鬆的操作。 要找到列表中第三小的數字,我們可以遵循類似的數組排序方法。

方法 3:利用流

Java 流是處理元素序列的強大方法。 我們可以使用流對元素進行排序,然後檢索第三小的數字。

選擇正確的方法

每種方法都有其自身的優點和用例。 如果您手頭有一個數組,則數組排序方法可能是最有效的。 列表用途廣泛,提供更多便利,而流則提供函數式方法,可以輕鬆處理更大的數據集。

這是一個完整的例子:

CrunchyThirdSmallestNumberFinder.java

 包 crunchify.com.tutorial;

導入java.util.Arrays;
導入java.util.List;
導入java.util.stream.Collectors;
導入 java.util.stream.Stream;

/**
 * @作者 Crunchify.com
 * 在 Java 中查找第三小的數字:綜合指南
 *
 */

公共類 CrunchyThirdSmallestNumberFinder {

    // 查找數組中第三小的數字的方法
    公共靜態 int findCrunchyThirdSmallest(int[] crunchArr) {
        if (crunchArr.length < 3) {
            throw new IllegalArgumentException("數組應包含至少 3 個 crunch 元素");
        }

        // 按升序對crunchy數組進行排序
        Arrays.sort(crunchArr);
        返回 crunchArr[2]; // 返回第三小的脆元素
    }

    // 查找列表中第三小的數字的方法
    公共靜態 int findCrunchyThirdSmallest(List<Integer> crunchList) {
        if (crunchList.size() < 3) {
            throw new IllegalArgumentException("列表應包含至少 3 個 crunch 元素");
        }

        // 使用流對 crunchy 列表進行排序,並將排序後的元素收集到一個新列表中
        List<Integer>sortedCrunchList = crunchList.stream()
                .sorted()
                .collect(Collectors.toList());

        返回sortedCrunchList.get(2); // 返回第三小的脆元素
    }

    // 查找流中第三小的數字的方法
    公共靜態 int findCrunchyThirdSmallest(Stream<Integer> crunchStream) {
        // 從 crunchy 流中收集元素,對它們進行排序,然後收集到一個列表中
        List<Integer> SortedCrunchList = crunchStream.sorted().collect(Collectors.toList());

        if (sortedCrunchList.size() < 3) {
            throw new IllegalArgumentException("Stream 應包含至少 3 個 crunch 元素");
        }

        返回sortedCrunchList.get(2); // 返回第三小的脆元素
    }

    公共靜態無效主(字符串[] args){
        int[] crunchArr = {35, 62, 28, 31, 13, 97};
        List<Integer> crunchList = Arrays.asList(9, 14, 676, 62, 11, 328);
        Stream<Integer> crunchStream = Stream.of(427, 53, 71, 99, 25, 62);

        // 使用不同的來源找到第三小的數字
        int crunchyThirdSmallestFromArr = findCrunchyThirdSmallest(crunchArr);
        int crunchyThirdSmallestFromList = findCrunchyThirdSmallest(crunchList);
        int crunchyThirdSmallestFromStream = findCrunchyThirdSmallest(crunchStream);

        // 打印第三小的數字
        System.out.println("Crunchy 第三小的 arr: " + crunchyThirdSmallestFromArr);
        System.out.println("Crunchy 列表中第三小的:" + crunchyThirdSmallestFromList);
        System.out.println("流中第三小的脆脆:" + CrunchyThirdSmallestFromStream);
    }
}

Eclipse 控制台結果:

只需在 Eclipse IDE 或 IntelliJ IDEA 中運行上面的程序,您將得到如下結果。

 鬆脆第三小的 arr:31
脆脆的名單中第三小的:14
流中第三小的鬆脆:62

進程已完成,退出代碼為 0

有一些性能差異需要考慮:

就時間複雜度而言,這三種方法都有類似的排序步驟,通常時間複雜度為O(n log n) ,其中“n”是集合(數組、列表或流)中元素的數量。

訪問第三小的元素的時間複雜度是常數, O(1) ,因為它是一個簡單的數組或列表查找。

  1. 數組方法:此方法對數組進行就地排序,因此不需要額外的內存來存儲新的排序集合。 與列表和流方法相比,這可以導致稍微更好的內存使用。
  2. 列表方法:此方法使用流將列表轉換為排序列表。 雖然方便,但它涉及創建一個新列表,這會消耗額外的內存。 如果內存使用至關重要,這可能是一個問題。
  3. Stream 方法: stream 方法非常靈活且實用,但它涉及將流收集到列表中。 與直接對數組進行排序相比,這會在內存和處理方面增加少量開銷。

如果您在運行此代碼時遇到任何問題,請告訴我。