假定有20個有序陣列,每個陣列有500個數字,數字型別32位uint數值,現在需要取出這10000個數字中最大的500個,怎麼做?
思路:20個有序陣列,不妨設數序為降序。首先把20個陣列中最大的(也就是a[i][0])進行大堆排序,輸出堆頂元素(最大),在輸出的那個元素之前所在的陣列中,取下乙個元素,放到堆頂,然後進行堆排序,在輸出堆頂元素,依次迴圈輸出500個即可。(輸出最小的500,同樣的道理,只不過進行小堆排序),這樣充分利用了題幹的條件。
#include
using
namespace
std;
struct
node
; node obj[20];
void
sift(
intk,
intm,
intb)
//調整乙個元素在堆的位置
} } void
s_hsort(
intn,
inta[500])
for(k=0;k<500;k++)
} intmain()
百度筆試題目
1 此題10分 對任意輸入的正整數n,編寫c程式求n 的尾部連續0的個數,並指出計算複雜度。如 18!6402373705728000,尾部連續0的個數是3。不用考慮數值超出計算機整數界限的問題 答 此題可以轉化成尋找能夠被5整除和被10整除的數,然後統計該數中末尾0的個數和能被5整除的次數。inc...
百度筆試題目及答案
請簡要描述一下hadoop,spark,mpi三種計算框架的特點以及分別適用於什麼樣的場景 a hadoop 基於分布式檔案系統hdfs的分布式批處理計算框架。適用於資料量大,spmd 單程式多資料 的應用。b spark 基於記憶體計算的平行計算框架。適用於需要迭代多輪計算的應用。c mpi 基於...
百度筆試題
一 選擇題 15分 共10題 1.在排序方法中,關鍵碼比較次數與記錄地初始排列無關的是 a.shell排序 b.歸併排序 c.直接插入排序 d.選擇排序 2.以下多執行緒對int型變數x的操作,哪幾個需要進行同步 a.x y b.x c.x d.x 1 3.void func 中,變數val的記憶體...