最小的K個數

2021-10-11 09:41:55 字數 692 閱讀 4427

給你乙個陣列,求出該陣列中最小的k的個數。

這種題型是topk問題,也就是求出陣列或者集合中前k大或者前k小的元素。

有多種解決方法,首先想到的是對資料進行排序,然後取出前k個元素。但是如果資料量很大怎麼辦?這時候需要使用到堆這種資料結構。我們可以維護乙個大小為 k 的小頂堆,順序遍歷陣列,從陣列中取出資料與堆頂元素比較。如果比堆頂元素小,我們就把堆頂元素刪除,並且將這個元素插入到堆中;如果比堆頂元素大,則不做處理,繼續遍歷陣列。這樣等陣列中的資料都遍歷完之後,堆中的資料就是前 k 小的資料了。

public arraylist

getleastnumbers_solution

(int

input,

int k)

// 優先順序佇列就是堆的實現,這裡構建的是小頂堆,最小的數是堆頂元素

queue

queue =

newpriorityqueue

<

>

(k, collections.

reverseorder()

);for(

int i=

0;i)else}}

//放入結果集

while

(!queue.

isempty()

)return res;

}

最小的K個數

問題描述 給定的n個整數,計算其中最小的k個數。最直觀的解法莫過於將n個數按公升序排列後輸出前k個。但是就效率來看,這種方法並不是最理想的。一種改進方法是借助快速排序中對陣列的劃分,以第k個元素對陣列進行劃分,使得比第k個數字小的數字都在其左邊,比其大的數字都在它的右邊。void swap int ...

最小的K個數

從 陣列中出現次數超過一半的數字 得到啟發,同樣可以基於partition函式來解決。一 o n 演算法 void getleastnumbers int input,int n,int output,int k else for int i 0 i k i output i input i 二 o...

最小的K個數

輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,如果不讓使用sort的話,自己實現乙個,或者依次選取最小的 class solution public vectorgetleastnumbers solution vectori...