N陣列 topK問題 解法

2021-10-11 06:29:15 字數 793 閱讀 3990

題目描述

有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(klogk),空間複雜度為o(k \log k)o(klogk)

c++優先佇列是優先順序高的在隊首,定義優先順序大小的方式是傳入乙個運算元的引數比較a, b兩個東西,返回true則a的優先順序預設是less運算元也就是返回ab,小的優先順序高。

如果是預設的less運算元,值大的優先順序高,值大的排到了隊頭,優先佇列大的先出隊。

#include

#include

#include

#include

using

namespace std;

intmain

(void)}

int res[k]

;for

(int i= k-

1; i>=0;

--i)

for(

int i=

0;i++i)

printf

("%d "

, res[i]);

printf

("\n");

}

top K 問題解法

問題描述 從arr 1,n 這n個數中,找出最大的k個數,這就是經典的topk問題。栗子 從arr 1,12 這n 12個數中,找出最大的k 5個。一 排序 排序是最容易想到的方法,將n個數排序之後,取出最大的k個,即為所得。偽 sort arr,1,n return arr 1,k 時間複雜度 o...

topK問題的幾種解法及C 實現

topk問題是經典的演算法問題,其大意是從乙個序列中找出最小 大 的k個數,面對這個問題最簡單的方法當然是先排序後取前k個數,但這樣有些浪費時間,比較經典的方法是借助快排和堆排的思想。注 為了方便討論,以下均選擇找出最小k個數。解法1 快速選擇 借助快排是思想,進行區域性的排序。void quick...

螺旋佇列問題解法

看到這個怪圖了嗎?對,就是螺旋佇列!看清以上數字排列的規律,設 1 點的座標是 0,0 x 方向向右為正,y 方向向下為正。例如,7 的座標為 1,1 2 的座標為 1,0 3 的座標為 1,1 程式設計實現輸入任意一點座標 x,y 輸出所對應的數字。finland 某著名通訊裝置公司 2005 年...