出現次數的topk問題
給定string型別的陣列strarr,再給定整數k,請嚴格按照排名順序列印 出次數前k名的字串。
[要求]
如果strarr長度為n,時間複雜度請達到o(n
logk)
o(n \log k)
o(nlogk)
輸入描述:
第一行兩個整數n, k。n表示陣列大小
接下來n行,每行乙個字串
輸出描述:
輸出k行,每行有乙個字串和乙個整數。
你需要按照出現出現次數由小到大輸出,若出現次數相同時字串字典序較小的優先輸出
示例1輸入
4 212
34
輸出1 1
2 1
示例2
輸入
4 211
23
輸出1 2
2 1
備註:
1 ⩽n
⩽105
1 \leqslant n \leqslant 10^5
1⩽n⩽10
5∑字元個數⩽1
05
\sum \text \leqslant 10^5
∑字元個數⩽1
051 ⩽k
⩽本質不同的字串數
1 \leqslant k \leqslant \text
1⩽k⩽
本質不同的字串數
保證輸入的字串僅含有大小寫字母/數字
題解:一般涉及到 topk 問題,首先應該考慮用堆。
所以,最終的時間複雜度為 o(n
logk
)o(nlogk)
o(nlog
k)。**:
#include
#include
#include
#include
#include
using
namespace std;
typedef pairint> psi;
class
mycompare};
intmain
(void
) priority_queue
, mycompare > heap;
for(
auto
& it : hash )}}
vector ans;
while
( heap.
size()
)for
(int i = k -
1; i >=0;
--i )
return0;
}
出現次數的TopK問題
給定string型別的陣列strarr,再給定整數k,請嚴格按照排名順序列印 出次數前k名的字串。要求 如果strarr長度為n,時間複雜度請達到o nlogk 輸出k行,每行有乙個字串和乙個整數 字串表示 你需要按照出現出現次數由大到小輸出,若出現次數相同時字串字典序較小的優先輸出 示例1 1 2...
SDUT 出現次數
time limit 1000ms memory limit 65536k 有疑問?點這裡 對於給定乙個整數序列,你的任務是確定這個序列中出現次數最多的整數和它出現的次數。輸入包含多組測試資料,每組資料的第一行為乙個整數 n 0 n 1000 接下來一行為 n 個以空格分隔的整數 ai,ai 2 3...
TopK問題詳解
1.基本topk問題描述 從1百萬個數中找出最大 或最小 的5個數 看到這個問題,很多同學的第一反應會是 排序。那麼,選擇哪種排序方法呢,有同學說 快排,將所有數排序後,再選出最大的5個。雖然快排確實能解決這個問題,但是需要對1百萬個數排序,但我們僅僅需要其中的5個。那麼,有更好的方法嗎?還記得我們...