在 Java 中查找第三小的數字:完整指南
已發表: 2023-08-23您是否想知道如何有效地找到數組、列表或整數流中第三小的數字? 在這篇博文中,我們將深入 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)
,因為它是一個簡單的數組或列表查找。
- 數組方法:此方法對數組進行就地排序,因此不需要額外的內存來存儲新的排序集合。 與列表和流方法相比,這可以導致稍微更好的內存使用。
- 列表方法:此方法使用流將列表轉換為排序列表。 雖然方便,但它涉及創建一個新列表,這會消耗額外的內存。 如果內存使用至關重要,這可能是一個問題。
- Stream 方法: stream 方法非常靈活且實用,但它涉及將流收集到列表中。 與直接對數組進行排序相比,這會在內存和處理方面增加少量開銷。
如果您在運行此代碼時遇到任何問題,請告訴我。