出現次數的TopK問題

2021-10-13 06:25:38 字數 1390 閱讀 3531

出現次數的topk問題

給定string型別的陣列strarr,再給定整數k,請嚴格按照排名順序列印 出次數前k名的字串。

[要求]

如果strarr長度為n,時間複雜度請達到o(n

log⁡k)

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個。那麼,有更好的方法嗎?還記得我們...