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

2021-10-10 12:46:16 字數 1510 閱讀 9820

列印n個陣列整體最大的top k

有n個長度不一的陣列,所有的陣列都是有序的,請從大到小列印這n個陣列整體最大的前k個數。

例如,輸入含有n行元素的二維陣列可以代表n個一維陣列。

219, 405, 538, 845, 971

148, 558

52, 99, 348, 691

再輸入整數k=5,則列印:

top 5: 971, 845, 691, 558, 538

[要求]

時間複雜度為o(k

log⁡k)

o(k \log k)

o(klogk)

,空間複雜度為o(k

log⁡k)

o(k \log k)

o(klogk)

輸入描述:

第一行兩個整數t, k。分別表示陣列個數,需要列印前k大的元素

接下來t行,每行輸入格式如下:

開頭乙個整數n,表示該陣列的大小,接下來n個已排好序的數表示陣列內的數

輸出描述:

從大到小輸出輸出k個整數,表示前k大。

示例1輸入

3 5

5 219 405 538 845 971

2 148 558

4 52 99 348 691

輸出
971 845 691 558 538
備註:

1

⩽陣列內數的總個數⩽1

05

1 \leqslant \text \leqslant 10^5

1⩽陣列內數的總個數⩽1

050

⩽陣列內元素⩽1

09

0 \leqslant \text \leqslant 10^9

0⩽陣列內元素⩽1

09保證各個輸入值合法

題解:利用堆來解決。具體思路如下:

ps:優先佇列可以直接使用,省很多事。。。但是鍛鍊編碼能力的話,老老實實寫堆吧23333。

**:

#include

#include

using

namespace std;

vectorint>

> a;

vector<

int> key, val;

int n, m, k, sze;

void

down

(int u )

}void

solve()

sze = n;

for(

int i = n >>

1; i;

--i )

down

( i )

;while

( k--

)else

down(1

);}}

intmain

(void)}

solve()

;return0;

}

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

問題描述 n個陣列用二維陣列表示 vector data 將所有數按照從大到小的順序進行排序,輸出前k個數,但這樣在面對海量資料時時間複雜度較高,利用堆的思想進行求解,步驟 1 建堆,將每個陣列的最後乙個數加入堆中,建立乙個大小為n的大堆 2 此時堆頂元素為所有資料中的最大的資料,輸出 3 假設堆頂...

列印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個陣列整體最大的TopK

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