尋找最大的K個數

解法1:可以使用容量為K的最小堆來存儲最大的K個數,最小堆的堆頂元素就是最大K個數中最小的一個。每次新考慮一個數X,如果X比堆頂的元素Y小,則不需要改變原來的堆。如果X比Y大,那么就用X替換堆頂的元素Y,并調整新的堆成為最小堆。調整堆的時間復雜度為O(log2K)。
這樣的話,算法掃描所有的數據一次,總的時間復雜度為O(N*log2K)。

解法2:如果所有N個數都是正整數,并且它們的取值范圍不太大,都在(0,MAXN)區間的話,可以考慮申請一個空間,例如數組count[MAXN],記錄下每個整數出現的個數(count[i]表示整數i在所有整數中出現的個數)。我們只須掃描一遍就可以得到count數據,然后,從數組最后往前數出K個數就OK了。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 解法1、 常規方法 ,如果數組很大呢?是放在堆還是放在棧呢?? 這個是一個問題;時間復雜度是O(N *logN) ...
    helinyu閱讀 140評論 0 1
  • 背景 一年多以前我在知乎上答了有關LeetCode的問題, 分享了一些自己做題目的經驗。 張土汪:刷leetcod...
    土汪閱讀 12,768評論 0 33
  • 解法一 最容易想到的方法是先對元素進行排序,然后取出前k個數,總時間復雜度O(n*logN)。你一定注意到了,當k...
    書呆子的復仇閱讀 3,890評論 2 1
  • 尋找最小的 k 個數 題目描述: 輸入 n 個整數,輸出其中最小的 k 個。 分析和解法: 解法一:排序輸出 要求...
    MinoyJet閱讀 605評論 0 0
  • 【程序1】 題目:古典問題:有一對兔子,從出生后第3個月起每個月都生一對兔子,小兔子長到第三個月后每個月又生一對兔...
    葉總韓閱讀 5,165評論 0 41