列印N個陣列整體最大的Top K

2021-07-22 23:56:15 字數 1144 閱讀 9881

問題描述:

n個陣列用二維陣列表示  vector> data

將所有數按照從大到小的順序進行排序,輸出前k個數,但這樣在面對海量資料時時間複雜度較高,利用堆的思想進行求解,

步驟:1、建堆,將每個陣列的最後乙個數加入堆中,建立乙個大小為n的大堆;

2、此時堆頂元素為所有資料中的最大的資料,輸出;

3、假設堆頂元素在二維陣列中的座標為(i,j),如果j>0,則將data[i][j-1],加入堆頂,並調整堆;

4、每次列印堆頂元素,並迴圈列印k次,

5,在第三步中若j==0,即該堆頂元素是其所在陣列中的第乙個元素,則將堆頂元素和堆的最後乙個元素進行交換,同時堆的大小減一,說明其中乙個陣列遍歷完了,接下來只需要n-1 大小的堆就行了。

這題主要是建立堆,堆的節點儲存的值分別有,當前值大小,當前值在二維陣列中的位置,即第幾個陣列的第幾個數,用於上面的第三步。

#include #include#include#includeusing namespace std;

bool cmp(int a,int b)

//堆的節點的結構

struct heapnode;

void heapinsert(vector&heap,int index);

void heapvify(vector&heap,int index,int heapsize);

void swap(vector&heap,int index1,int index2)

//輸出topk個數

void printtopk(vector> data,int k)

if(rightheap[largest].val)

if(largest!=index)else

index=largest;

left=2*index+1;

right=2*index+1;

}}//在index處插入乙個元素

void heapinsert(vector&heap,int index)

printtopk(test,k);

return 0;

}

列印N個陣列整體最大的TopK

題目 有n個長度不一的陣列,所有的陣列都是有序的,請從大到小列印這個n個陣列整體最大的前k個數。例如,輸入含有n行元素的二維陣列可以代表n個一維陣列。219,405,538,845,971 148,558 52,99,348,691 再輸入整數k 5,則列印 971,845,691,558,538 ...

列印N個陣列整體最大的Top K

列印n個陣列整體最大的top k 有n個長度不一的陣列,所有的陣列都是有序的,請從大到小列印這n個陣列整體最大的前k個數。例如,輸入含有n行元素的二維陣列可以代表n個一維陣列。219,405,538,845,971 148,558 52,99,348,691 再輸入整數k 5,則列印 top 5 9...

陣列與矩陣 列印N個陣列整體最大的TopK

題目 有n個長度不一的陣列,所有的陣列都是有序的,請從大到小列印這個n個陣列整體最大的前k個數。例如,輸入含有n行元素的二維陣列可以代表n個一維陣列。219,405,538,845,971 148,558 52,99,348,691 再輸入整數k 5,則列印 971,845,691,558,538 ...