題目:輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4.
思路1,同29題一樣,利用快排思想,醉倒第k大的數,它左邊都比它小即可。o(n)
2,適合海量資料,利用堆資料結果,取數o(1),刪除和插入需要o(k),總共n個數,時間複雜度o(nlogk)
要做三件事:
a,在k個整數中找到最大數;
b,有可能在這個容器中刪除最大數;
c,有可能要插入乙個新的數字;
演算法一:
源**:
#include "stdio.h"
int partition(int a,int low,int high)
else
}}void main()
; int len=8;
minkdata(a,len,4);
for(int i=0;i<4;i++)
printf("result:%d",a[i]);
}
結果:
index1:3
result:3result:2result:1result:4press any key to continue
面試題30 最小的k個數
輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4。思路1 按遞增排序,然後輸出前k個數,簡單粗暴,時間複雜度o nlogn 思路2 利用partition演算法,找到第k大數,輸出其左邊k個數,時間複雜度o n 思路3 開乙個規模...
面試題30 最小的k個數
1.輸入n個整數,找出其中的最小的k個數,例如輸入4,5,1,6,2,7,3,8 這8個數字,則其中最小的4個數字是1,2,3,4,分析 方法一,可以採用類似快速排序的解法,基於陣列中第k個數來進行調整,使得比第k個數字大的所有數字都在陣列的右邊,小的都在第k個數字的左邊。方法二 可以建立乙個大小為...
劍指offer 面試題30 最小的K個數
題目 輸入n個數,找出其中最小的k個數。例如輸入4 5 1 6 2 7 3 8這8個數字,則最小的4個數字是1,2,3,4。思路 這道題目是典型的top k問題。兩種方法 1 如果允許改變量列,半快速排序,是基準值正好為第k個數,那麼基準值左邊的都是小於它的,即可得到最小的k個數 求最大的過程類似 ...