輸入n個整數,輸出k個最小的數。例如輸入4,5,1,6,2,7,3,8這8個數,則最小的4個數字是1,2,3,4。利用堆排序
(1)遍歷陣列,將前k個數插入到堆中,使用multiset來實現堆(2)繼續從輸入陣列中讀入元素,作為待插入的整數,並將它與堆中的最大值進行比較,若待插入的值比這個最大值小,則用它替換最大值,否則拋棄這個數,繼續讀取下乙個數.動態的維護堆中的數都是最小的,最後輸出堆即可.
multiset和set的區別是multiset允許元素重複.
如果本題變為求k個最大的數,則將最大堆變為最小堆,並且繼續從輸入陣列中讀入元素,作為待插入的整數,將它與堆中的最小值進行比較,若待插入的值比這個最小值大,則用它替換最小值,否則拋棄這數,繼續讀取下乙個數,動態的維護堆中的數都是最大的,最後輸出堆即可.
vector getleastnumber(vector input,int
k)
multiset
>leastnumber;
multiset
>::iterator itergreater;
vector
::iterator iter=input.begin();
for(;iter!=input.end();++iter)
else}}
for(iter=leastnumber.begin();iter!=leastnumber.end();++iter)
return
result;
}
k個最小的數
問題 查詢大量無序元素中最大的k個數。解法一 該解法是大部分能想到的,也是第一想到的方法。假設資料量不大,可以先用快速排序或堆排序,他們的平均時間複雜度為o n logn 然後取出前k個,時間複雜度為o k 總的時間複雜度為o n logn o k 當k 1時,上面的演算法的時間複雜度也是o n l...
查詢最小的k個元素
題目 輸入n個整數,輸出其中最小的k個。演算法思想,要是將n個數排序然後輸出前k個,方法很簡單,但計算量比較大,為o nlogn 要是新建乙個有k個元素陣列,在陣列不滿時,將每乙個輸入的資料存入陣列。若陣列滿了,則比較輸入的資料與陣列中最大元素的大小,來決定接下來幹什麼,接下來幹什麼,我語言表達能力...
查詢最小的k個元素
查詢最小的k個元素 題目 輸入n個整數,輸出其中最小的k個。例如輸入1,2,3,4,5,6,7和8這8個數字,則最小的4個數字為1,2,3和4。1 輸入元素,並排序 2 輸出前k個元素 排序 採用高效的排序方法,如 快速排序,歸併排序等 方法一 採用最簡單的方法 include include in...