原文:面試題-10億個數中找出最大的10000個數(top K問題)

一個較好的方法:先拿出 個建立小根堆,對於剩下的元素,如果大於堆頂元素的值,刪除堆頂元素,再進行插入操作,否則直接跳過,這樣知道所有元素遍歷完,堆中的 個就是最大的 個。時間復雜度: m n logm O nlogm 優化的方法:可以把所有 億個數據分組存放,比如分別放在 個文件中 如果是字符串hash x M 。對每個文件,建立大小為 的小根堆,然后按有序數組的合並合並起來,取出最大的 個即是答 ...

2020-03-05 20:19 0 1808 推薦指數:

查看詳情

海量數據處理 - 10個數找出最大10000個數top K問題

前兩天面試3面學長問我的這個問題(想說TEG的3個面試學長都是好和藹,希望能完成最后一面,各方面原因造成我無比想去鵝場的心已經按捺不住了),這個問題還是建立最小堆比較好一些。 先拿10000個數建堆,然后一次添加剩余元素,如果大於堆頂的10000最小的),將這個數替換堆頂 ...

Sat Feb 16 04:10:00 CST 2019 2 5644
利用最小堆找出10個數最大10000個數

最小堆 最小堆是一種完全二叉樹,特點是根節點比兩個子節點都小(或者根節點比子節點都大) 過程 先找10000個數構建最小堆 依次遍歷10個數,如果比最小堆的最小值大,則替換這個最小值,並重新構建最小堆 最后輸入10000個值 時間復雜度 構建最小堆的復雜度為 logn ...

Tue May 01 18:53:00 CST 2018 0 2403
(算法)從10000個數找出最大10

  從10000個整數找出最大10個,最好的算法是什么? 算法一:冒泡排序法   千里之行,始於足下。我們先不說最好,甚至不說好。我們只問,如何“從10000個整數找出最大10個”?我最先想到的是用冒泡排序的辦法:我們從頭到尾走10趟,自然會把最大10個數找到。方法簡單,就不再這里寫 ...

Thu Mar 21 05:10:00 CST 2013 10 19235
[面試題]在數組找出3個數使得它們和為0

給定一個數組S,試找出3個數a, b, c,使得a+b+c=0。也即從集合找出所有的和為0的3個數。 例如:集合S={-1,0, 1, 2, -1, 4},則滿足條件的3個數有2對: (-1, 0, 1)和(-1, 2, -1)。注意(-1,1,0)與(-1,0,1)算同一個解 ...

Fri Jul 07 07:47:00 CST 2017 2 3658
面試題找出數組只出現一次的2個數(異或的巧妙應用)(出現3次)(轉)

題目:一個整型數組里除了兩個數字之外,其他的數字都出現了兩次。請寫程序找出這兩個只出現一次的數字。要求時間復雜度是O(n),空間復雜度是O(1)。 分析:這是一道很新穎的關於位運算的 面試題。 首先我們考慮這個問題的一個簡單版本:一個數組里除了一個數字之外,其他的數字都出現了兩次。請寫程序找出 ...

Fri Nov 01 02:03:00 CST 2019 0 334
面試題找出數組只出現一次的2個數(異或的巧妙應用)(出現3次)

題目:一個整型數組里除了兩個數字之外,其他的數字都出現了兩次。請寫程序找出這兩個只出現一次的數字。要求時間復雜度是O(n),空間復雜度是O(1)。 分析:這是一道很新穎的關於位運算的面試題。 首先我們考慮這個問題的一個簡單版本:一個數組里除了一個數字之外,其他的數字都出現了兩次。請寫程序找出 ...

Thu Oct 03 07:49:00 CST 2013 0 15946
 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM