1 億個數據取出最大前 100 個有什么方法?

1 億個數據取出最大前 100 個有什么方法?

大家好,這是一道經常在面試中被遇到的一個問題,我之前面試也是被問到過得,現在一起學習下,下次再被問到就可以輕松地用對。

在計算機科學和數據處理領域,我們經常會遇到需要從海量的數據中找出最大或最小的若干個元素的情況。本文將以 Java 為例,介紹幾種從 1 億個數據中取出最大前 100 個的方法。

方法一:排序后取前 100 個

最直觀的方法是先將這 1 億個數據排序,然后取排序后的前 100 個。在 Java 中,可以使用 Arrays 類的 sort 方法或者 PriorityQueue 類來實現。

  1. 示例:使用 Arrays.sort()
import java.util.Arrays;
public class Main {public static void main(String[] args) {int[] data = generateData(100000000);Arrays.sort(data);int[] top100 = new int[100];System.arraycopy(data, 0, top100, 0, 100);// 輸出最大前 100 個數for (int num : top100) {System.out.print(num + " ");}}public static int[] generateData(int size) {int[] data = new int[size];for (int i = 0; i < size; i++) {data[i] = (int) (Math.random() * 100000000);}return data;}
}
  1. 示例:使用 PriorityQueue
import java.util.PriorityQueue;
public class Main {public static void main(String[] args) {int[] data = generateData(100000000);PriorityQueue<Integer> pq = new PriorityQueue<>(100000000, (a, b) -> b - a);for (int num : data) {pq.offer(num);if (pq.size() > 100) {pq.poll();}}int[] top100 = new int[100];while (!pq.isEmpty()) {top100[pq.size() - 1] = pq.poll();}// 輸出最大前 100 個數for (int num : top100) {System.out.print(num + " ");}}public static int[] generateData(int size) {int[] data = new int[size];for (int i = 0; i < size; i++) {data[i] = (int) (Math.random() * 100000000);}return data;}
}

優缺點
? 優點:簡單易懂,代碼實現容易。
? 缺點:時間復雜度較高,對于大數據量來說,排序所需的時間可能會很長。

方法二:使用部分排序算法

部分排序算法(如快速選擇算法)可以在不需要完全排序的情況下找到第 k 大的元素。我們可以使用這個算法來找出最大前 100 個元素。

  1. 示例:使用快速選擇算法
import java.util.Random;
public class Main {public static void main(String[] args) {int[] data = generateData(100000000);int[] top100 = findTop100(data);// 輸出最大前 100 個數for (int num : top100) {System.out.print(num + " ");}}public static int[] findTop100(int[] data) {int[] result = new int[100];int left = 0;int right = data.length - 1;for (int i = 0; i < 100; i++) {int pivot = data[(left + right) / 2];int leftCount = 0;int rightCount = data.length - 1 - i;for (int num : data) {if (num > pivot) {rightCount--;} else {leftCount++;}}if (leftCount > rightCount) {right = (left + right) / 2;} else {left = (left + right) / 2 + 1;}result[i] = pivot;}return result;}public static int[] generateData(int size) {int[] data = new int[size];for (int i = 0; i < size; i++) {data[i] = (int) (Math.random() * 100000000);}return data;}
}

優缺點
? 優點:時間復雜度較低,對于大數據量來說,效率更高。
? 缺點:代碼實現相對復雜,需要理解快速選擇算法的原理。 以上就是從 1 億個數據中取出最大前 100 個的幾種方法,各有優缺點,可以根據實際情況選擇合適的方法。

今天的分享就到這里,如果覺得對你有幫助,感謝點贊、分享、關注一波,你的認可是我創造的最大動力。

更多內容請關注公眾號:程序猿漠然,一個分享有趣后端知識的公眾號。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/211091.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/211091.shtml
英文地址,請注明出處:http://en.pswp.cn/news/211091.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【GDB】

GDB 1. GDB調試器1.1 前言1.2 GDB編譯程序1.3 啟動GDB1.4 載入被調試程序1.5 查看源碼1.6 運行程序1.7 斷點設置1.7.1 通過行號設置斷點1.7.2 通過函數名設置斷點1.7.3 通過條件設置斷點1.7.4 查看斷點信息1.7.5 刪除斷點 1.8 單步調試1.9 2. GDB調試core文件2.1 設定core文件的…

(五)五種最新算法(SWO、COA、LSO、GRO、LO)求解無人機路徑規劃MATLAB

一、五種算法&#xff08;SWO、COA、LSO、GRO、LO&#xff09;簡介 1、蜘蛛蜂優化算法SWO 蜘蛛蜂優化算法&#xff08;Spider wasp optimizer&#xff0c;SWO&#xff09;由Mohamed Abdel-Basset等人于2023年提出&#xff0c;該算法模型雌性蜘蛛蜂的狩獵、筑巢和交配行為&…

iOS(swiftui)——系統懸浮窗( 可在其他應用上顯示,可實時更新內容)

因為ios系統對權限的限制是比較嚴格的,ios系統本身是不支持全局懸浮窗(可在其他app上顯示)。在iphone14及之后的iPhone機型中提供了一個叫 靈動島的功能,可以在手機上方可以添加一個懸浮窗顯示內容并實時更新,但這個功能有很多局限性 如:需要iPhone14及之后的機型且系統…

Java面試遇到的一些常見題

目錄 1. Java語言有幾種基本類型&#xff0c;分別是什么&#xff1f; 整數類型&#xff08;Integer Types&#xff09;&#xff1a; 浮點類型&#xff08;Floating-Point Types&#xff09;&#xff1a; 字符類型&#xff08;Character Type&#xff09;&#xff1a; 布爾類…

(六)五種最新算法(SWO、COA、LSO、GRO、LO)求解無人機路徑規劃MATLAB

一、五種算法&#xff08;SWO、COA、LSO、GRO、LO&#xff09;簡介 1、蜘蛛蜂優化算法SWO 蜘蛛蜂優化算法&#xff08;Spider wasp optimizer&#xff0c;SWO&#xff09;由Mohamed Abdel-Basset等人于2023年提出&#xff0c;該算法模型雌性蜘蛛蜂的狩獵、筑巢和交配行為&…

【完整項目】雙模式答題卡識別軟件中YOLO模式的訓練部分詳解,包括訓練填涂區域和手寫準考證號,手把手詳細教學,可延申拓展訓練其他圖像數據

目錄 前言1. 數據準備2. 數據標注3. 先跑起來Windows下用本地的CPU或GPU訓練本地Windows系統連接服務器訓練前言 前文:【完整項目】基于Python+Tkinter+OpenCV+Yolo+手寫OCR的雙模式答題卡識別軟件的設計與實現 如果你需要訓練自己的答題卡模型,那么請先看上面的文章鏈接。…

Flutter自定義下拉選擇框dropDownMenu

利用PopupMenuButton和PopupMenuItem寫了個下拉選擇框&#xff0c;之所以不采用系統的&#xff0c;是因為自定義的更能適配項目需求&#xff0c;話不多說&#xff0c;直接看效果 下面直接貼出代碼、代碼中注釋寫的都很清楚&#xff0c;使用起來應該很方便&#xff0c;如果有任何…

C : DS靜態查找之順序索引查找

Description 給出一個隊列和要查找的數值&#xff0c;找出數值在隊列中的位置&#xff0c;隊列位置從1開始 要求使用順序索引查找算法&#xff0c;其中索引表查找和塊內查找都采用不帶哨兵、從頭開始的順序查找方法。 Input 第一行輸入n&#xff0c;表示主表有n個數據 第二…

OpenSSL 編程指南

目錄 前言初始化SSL庫創建SSL 上下文接口(SSL_CTX)安裝證書和私鑰加載證書(客戶端/服務端證書)加載私鑰/公鑰加載CA證書設置對端證書驗證例1 SSL服務端安裝證書例2 客戶端安裝證書創建和安裝SSL結構建立TCP/IP連接客戶端創建socket服務端創建連接創建SSL結構中的BIOSSL握手服務…

Scrum

Scrum是一個用于開發和維持復雜產品的框架&#xff0c;是一個增量的、迭代的開發過程。在這個框架中&#xff0c;整個開發過程由若干個短的迭代周期組成&#xff0c;一個短的迭代周期稱為一個Sprint&#xff0c;每個Sprint的建議長度是2到4周(互聯網產品研發可以使用1周的Sprin…

【Linux】輸出緩沖區和fflush刷新緩沖區

目錄 一、輸出緩沖區 1.1 輸出緩沖區的使用 1.2 緩沖區的刷新 1.3 輸出緩沖區的作用 二、回車換行 一、輸出緩沖區 C/C語言&#xff0c;當調用輸出函數&#xff08;如printf()、puts()、fwrite()等&#xff09;時&#xff0c;會給我們提供默認的緩沖區。這些數據先存…

虛擬機安裝 hyper—v 沙盒

一、下載系統鏡像 1、確認電腦內存在8G及以上并提前準備完整的系統鏡像 安裝Hyper-V并重啟電腦后打開程序選擇虛擬機 選擇安裝位置并設置保留第一代的虛擬參數即可開始分配內存&#xff0c;根據自己的需求進行設置 右鍵虛擬機啟動并開始運行&#xff0c;進行鏡像系統的安裝便完…

【Flutter】創建應用頂級組件,應用根組件 (學習記錄)

前言 在 Flutter 中&#xff0c;應用的頂級組件或根組件通常是在 main() 函數中通過 runApp() 方法創建的。這個組件通常是一個 MaterialApp、CupertinoApp、GetMaterialApp 或其他類似的應用框架組件。 以下是一個創建 MaterialApp 作為根組件的示例&#xff1a; void main()…

牛客算法心得——環形數組的連續子數組最大和(dp)

大家好&#xff0c;我是晴天學長&#xff0c; 一個找連續子數組最大和的變形題&#xff0c;需要的小伙伴可以關注支持一下哦&#xff01;后續會繼續更新的。&#x1f4aa;&#x1f4aa;&#x1f4aa; 1) .環形數組的連續子數組的最大和 描述 給定一個長度為 nn 的環形整數數組&…

『 MySQL數據庫 』聚合統計

文章目錄 前言 &#x1f951;&#x1f95d; 聚合函數&#x1f353; COUNT( ) 查詢數據數量&#x1f353; SUM( ) 查詢數據總和&#x1f353; AVG( ) 查詢數據平均值&#x1f353; MAX( ) 查詢數據最大值&#x1f353; MIN( ) 查詢數據最小值 &#x1f95d; 數據分組GROUP BY子句…

湖科大計網:計算機網絡概述

一、計算機網絡的性能指標 一、速率 有時候數據量也認為是以10為底的&#xff0c;看怎么好算。&#xff08;具體吉大考試用什么待商榷&#xff09; 二、帶寬 在模擬信號系統中帶寬的含義&#xff0c;本課程中用到的地方是&#xff1a;香農定理和奈奎斯特定理公式的應用之中。 …

全面高壓化與全面超快充,破解新能源汽車的時代難題

是什么讓新能源車主感到疲憊與焦慮&#xff1f;是什么阻擋更多消費者選擇新能源汽車&#xff1f;我們在身邊進行一個簡單的調查就會發現&#xff0c;問題的答案非常一致&#xff1a;充電。 充電難&#xff0c;充電慢的難題&#xff0c;始終是困擾新能源汽車產業發展&#xff0c…

vue,uniapp的pdf等文件在線預覽

vue&#xff0c;uniapp文件在線預覽方案&#xff0c;用了個稍微偏門一點的方法實現了 通過后端生成文件查看頁面&#xff0c;然后前端只要展示這個網頁就行&#xff0c;uniapp就用web-view來展示&#xff0c;后臺系統就直接window.open()打開就行 示例查看PDF文件&#xff0c;…

每日一練【四數之和】

一、題目描述 18. 四數之和 給你一個由 n 個整數組成的數組 nums &#xff0c;和一個目標值 target 。請你找出并返回滿足下述全部條件且不重復的四元組 [nums[a], nums[b], nums[c], nums[d]] &#xff08;若兩個四元組元素一一對應&#xff0c;則認為兩個四元組重復&#x…

基于ssm社區管理與服務的設計與實現論文

目錄 摘 要 1 Abstract 2 第一章 緒論 3 1.1研究背景 3 1.2 研究現狀 3 1.3 研究內容 4 第二章 系統關鍵技術 5 2.1 Java簡介 5 2.2 MySql數據庫 5 2.3 B/S結構 6 2.4 Tomcat服務器 6 第三章 系統分析 7 3.1可行性分析 7 3.1.1技術可行性 7 3.1.2經濟可行性 7 3.1.3運行可行性…