查詢最大的K個數 查詢最小的K個數

2021-09-13 13:17:06 字數 821 閱讀 2867

使用乙個容器,大小為k;用這個容器來儲存這最大的或者最小的k個數。

如果是找最大的k個數,那麼,每次和容器中的最小元素比較,如果最小的元素小於當前元素,那麼刪除這個最小的元素,同時將當前元素插入;

如果是找最小的k個數,那麼就和容器中最大的元素比較。同理。

容器用哪個呢?

容器選擇用set,set本身就是排序的,始終自動保持排序。那麼用迭代器就可以找到最大或者最小的元素。

使用這種方法,時間複雜度為o(nlogk)。

注:這是一種高效,又適合海量資料的方法,通用方法。

set是從小到大排序的。使用迭代器可以確定最大最小元素。

set<

int> s;

auto iter=s.

begin()

;//iter指向最小的值

auto iter=s.

end();

--iter;

// 此時iter指向最大的值

另外:set插入元素使用inset;

set刪除元素,使用erase:s.erase(iter)

#include

#include

#include

using

namespace std;

intmain()

for(

int i=

0;isize()

;i++

)else}}

for(

auto re:s)

return0;

}

查詢最小的K個數

輸出最小的k個數 方案1 如果輸入的陣列可變,我們可以借助partion部分排序的思想,隨機選k值,經過排序後,k左邊的數都比k小,k右邊的數都比k大,這樣經過排序後,在k左邊的數字就是最小的k個數 int partion int a,int n,int left,int right if left...

查詢最小的k個數

乙個整型陣列,有n個元素,可以含有重複元素。查詢該陣列中最小的k個數。1 對陣列快速排序,然後從前往後依次挑出最小的k個元素,時間複雜度 nlogn k nlogn 2 設定乙個容量是 k 的臨時陣列,掃瞄目的陣列,如果臨時陣列元素個數小於k,直接填入臨時陣列,如果臨時陣列元素個數大於k,找出臨時陣...

查詢n個數中最小的k個元素

求n個數中最小的k個元素 n很大,k相對較小 建立乙個k個元素的堆 再逐個插入,最壞情況時間複雜度為o nlgk include 求左右葉子 父結點的巨集定義 define left i i 2 define right i i 2 1 define parent i i 2 維持堆的性質 演算法原...