原文:找出數組前N大的數

這個題也是個比較有名的面試題.當然有很多變種. 題目意思基本是:從一個數據量很大的數組里找前N大的元素.不允許排序. 這個題有兩個比較好的思路: 思路一:用快速排序的思想,是思想,不是要排序 思路二:用最大堆的思想. 我暫時只實現了思路一,思路二我之后實現了會補上. 思路一比較簡單了.我們先用快排的思想找出第n大的數,然后帶上后面n 個就完事了.因為后面的都比支點數大. 怎么找第n大的數 我在之 ...

2014-12-03 20:40 0 2672 推薦指數:

查看詳情

長為N數組,元素范圍是0-N-1,其中只有一個是重復的,找出這個重復元素

思路:如果限制空間復雜度為O(1),我們就無法采用哈希表的方法去求解。題目中數組中所以數字都在范圍[0, N-1],因此哈希表的大小為N即可。因此我們實際要做的就是對N個范圍為0到N-1的進行哈希,而哈希表的大小剛好為N。對排序算法比較熟悉的同學不難發現這與一種經典的排序算法——基數排序非常類似 ...

Mon Jul 16 18:07:00 CST 2018 0 877
找出2n+1個中不成對的那個

問題定義:有2n+1個,只有一個單着,別的都是成對的,找出這個單着的。比如:2 1 3 2 1。3是答案。 思路一:暴力搜索——每個數都和其他比較,找不到相同的,就得到了結果。時間復雜度為o(n2) 思路二:排序搜索——先給序列排個序,之后從前往后一對一對的找,直到不是成對的為止 ...

Thu Apr 04 06:42:00 CST 2013 13 2320
給定一個長度為N數組找出出現次數大於n/2,n/3的,要求時間復雜度O(n),空間復雜度O(1)

  先討論出現次數大於n/2的數字,如果這樣的數字存在,那么這個數出現的次數大於其他數出現的次數的總和。 在數組A中,我們定義兩個數據集合a1,a2。a1為出現次數大於n/2的的集合,a2為其余數組成的集合。對於數組 A中元素a、b,假設a不等於b,那么有兩種情況,分別為:a屬於a1,b屬於 ...

Fri Nov 01 04:59:00 CST 2019 0 300
n個無序數中找出第K大的

遇到題目為從n個無序數組找出第K大的,最開始想到的就是冒泡排序、選擇排序等,每次找到一個最大(或最小)的,但是很明顯需要時間復雜度為O(n*k)!具體代碼細節參考findK_2 改進一點的算法有根據快速排序的思想,時間復雜度達到O(n)。想象一下,第k大,說明前面有k-1 ...

Wed Aug 07 01:02:00 CST 2019 1 1020
如何在10億找出1000大的

1.排序方法 首先能想到的就是先排序,然后取1000個,或者部分排序,只排出1000個就行 缺點:這些方法的時間復雜度都比較高 2,分治法 可以使用分治法,這有點類似快排中partition的操作,隨機選一個t,然后對整個數組進行partition,會得到兩部分,一部分的 ...

Mon Nov 19 18:52:00 CST 2018 0 1396
N個自然的隨機置換

來自:【數據結構與算法分析——C語言描述】練習2.7 問題描述:假設需要生成N個自然的一個隨機置換。例如,{4,1,2,5,2} 和 {3,1,4,2,5} 就是合法的置換,但 {5,4,1,2,1} 卻不是,因為1出現了兩次而 3 缺沒有。這個程序常常用於模擬一些算法 ...

Mon Sep 19 03:14:00 CST 2016 0 1977
 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM