題目:有20個陣列, 每個陣列裡面有500個數, 公升序排列, 求出這10000個數字中最大的500個。 求複雜度。
暴力法,直接將20個陣列中的資料全部合併,重新排序,然後取出最大的500個。
如果空間允許的情況下,排序的時間複雜度根據選擇的排序演算法來決定。
從20個陣列中各取乙個數,並記錄每個數的**陣列,建立乙個含20個元素的大根堆。
此時堆頂就是最大的數,取出堆頂元素,並從堆頂元素的**陣列中取下乙個數加入堆,再取最大值,一直這樣進行500次即可。
時間複雜度:500*log(20)
怎麼記錄每個數的**陣列?
用結構體記錄,乙個成員記錄值,乙個記錄**,按成員值比較
也可以單獨用乙個陣列儲存。
/*
原題:有20個陣列,每個陣列裡面有500個數,公升序排列,求出這10000個數中最大的500個,求複雜度。
演算法實現:為簡化,設有5個陣列,每個陣列裡面有10個數,公升序排列,求出50個數中最大的5個數。
*/#include
using
namespace
std;
void creatheap(int s,int n) //建堆,最大堆即首元素是最大的
else
break;}}
}int main()
, ,,,
};int b[5]=;//作為標記當前取該陣列的哪個
int temp[5];
int count=0;
int result[10];
for(int m=0;m<10;m++)
creatheap(temp,5);//需要標記最大的值temp[0]在那個陣列中
int max=temp[0];
result[count++]=max;
for(int i=0;i<5;i++)}}
for(int i=0;i<10;i++)
}
程式設計師面試寶典
據統計,80 的簡歷都是不合格的。不少人事管理者抱怨收到的許多簡歷在格式上很糟糕。簡歷應該如何做到在格式上簡潔明瞭,重點突出?求職信應該如何有足夠的內容推銷自己?如何控制長度,言簡意賅?相信讀了本章你會對簡歷的撰寫有乙個新的認識。2.1 簡歷注意事項 1 簡歷不要太長 一般的簡歷普遍都太長。其實簡歷...
《程式設計師面試寶典》摘記
簡歷注意事項 1.簡歷不要太長 中文簡歷壓縮在 2頁左右就可以把所有的內容突出了。一般來說學習經歷應該從大學開始寫起。2.如實填寫。3.不要過分謙虛,不要把自己的一切包括弱項都寫進去。4.求職簡歷上一定要註明求職的職位。根據所申請的職位來設計,突出你在這方面的優點。編寫乙份或者幾份有針對性的簡歷。5...
程式設計師面試寶典一
1 int i i 首先宣告乙個變數i,然後將變數i的值 未初始化 賦值給自己 2 下面 的意義 void func int x,int count 求乙個整數轉換為二進位制之後包含多少個1 3 printf在vc6.0下是自右向左運算的 好像跟編譯器有關 int arr int ptr arr p...