Skip to content

Commit 8b57869

Browse files
committed
commit 4
1 parent 638af51 commit 8b57869

5 files changed

Lines changed: 184 additions & 0 deletions

File tree

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<!--
2+
* @Author: tkzzzzzz6
3+
* @Date: 2026-04-19 14:25:47
4+
* @LastEditors: tkzzzzzz6
5+
* @LastEditTime: 2026-04-19 14:25:50
6+
-->
7+
8+
大小顶堆:二叉树
9+
10+
优先队列
11+
12+
不用维护所有元素,只需要维持 k 个元素
13+
14+
这里推荐使用小顶堆,因为我们需要维护 k 个最大的元素,小顶堆的堆顶就是最小的元素,当我们遇到一个新的元素时,如果它比堆顶元素大,说明它应该进入堆中,我们就把堆顶元素弹出,然后把新的元素加入堆中。这样我们就能保证堆中始终保持 k 个最大的元素。
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
/*
2+
* @lc app=leetcode.cn id=347 lang=cpp
3+
* @lcpr version=30204
4+
*
5+
* [347] 前 K 个高频元素
6+
*/
7+
8+
9+
// @lcpr-template-start
10+
using namespace std;
11+
#include <algorithm>
12+
#include <array>
13+
#include <bitset>
14+
#include <climits>
15+
#include <deque>
16+
#include <functional>
17+
#include <iostream>
18+
#include <list>
19+
#include <queue>
20+
#include <stack>
21+
#include <tuple>
22+
#include <unordered_map>
23+
#include <unordered_set>
24+
#include <utility>
25+
#include <vector>
26+
// @lcpr-template-end
27+
// @lc code=start
28+
class Solution {
29+
public:
30+
vector<int> topKFrequent(vector<int>& nums, int k) {
31+
unordered_map<int,int> mp;
32+
int n = nums.size();
33+
34+
for(int i = 0;i<n;++i)
35+
mp[nums[i]]++;
36+
37+
auto cmp = [](const auto&a,const auto&b){
38+
return a.second > b.second;
39+
};
40+
41+
priority_queue<pair<int,int>,vector<pair<int,int>>,decltype(cmp)> pq(cmp);
42+
43+
for(unordered_map<int,int>::iterator it = mp.begin();it != mp.end();++it){
44+
pq.push(*it);
45+
if(pq.size() > k){
46+
pq.pop();
47+
}
48+
}
49+
50+
vector<int> res(k);
51+
for(int i = k-1;i>=0;--i){
52+
res[i] = pq.top().first;
53+
pq.pop();
54+
}
55+
return res;
56+
}
57+
};
58+
// @lc code=end
59+
60+
61+
62+
/*
63+
// @lcpr case=start
64+
// [1,1,1,2,2,3]\n2\n
65+
// @lcpr case=end
66+
67+
// @lcpr case=start
68+
// [1]\n1\n
69+
// @lcpr case=end
70+
71+
// @lcpr case=start
72+
// [1,2,1,2,1,2,3,1,3,2]\n2\n
73+
// @lcpr case=end
74+
75+
*/
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
{
2+
"version": 1,
3+
"all_bricks": {
4+
"347": {
5+
"submit_time": [
6+
1776593902
7+
],
8+
"type": 4,
9+
"review_day": [
10+
1776614400,
11+
1776873600,
12+
1777132800,
13+
1777737600,
14+
1778947200,
15+
1781712000
16+
]
17+
}
18+
}
19+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"version":1}
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
/*
2+
* @lc app=leetcode.cn id=347 lang=cpp
3+
* @lcpr version=30204
4+
*
5+
* [347] 前 K 个高频元素
6+
*/
7+
8+
9+
// @lcpr-template-start
10+
using namespace std;
11+
#include <algorithm>
12+
#include <array>
13+
#include <bitset>
14+
#include <climits>
15+
#include <deque>
16+
#include <functional>
17+
#include <iostream>
18+
#include <list>
19+
#include <queue>
20+
#include <stack>
21+
#include <tuple>
22+
#include <unordered_map>
23+
#include <unordered_set>
24+
#include <utility>
25+
#include <vector>
26+
// @lcpr-template-end
27+
// @lc code=start
28+
class Solution {
29+
public:
30+
vector<int> topKFrequent(vector<int>& nums, int k) {
31+
unordered_map<int,int> mp;
32+
int n = nums.size();
33+
34+
for(int i = 0;i<n;++i)
35+
mp[nums[i]]++;
36+
37+
auto cmp = [](const auto&a,const auto&b){
38+
return a.second > b.second;
39+
};
40+
41+
priority_queue<pair<int,int>,vector<pair<int,int>>,decltype(cmp)> pq(cmp);
42+
43+
for(unordered_map<int,int>::iterator it = mp.begin();it != mp.end();++it){
44+
pq.push(*it);
45+
if(pq.size() > k){
46+
pq.pop();
47+
}
48+
}
49+
50+
vector<int> res(k);
51+
for(int i = k-1;i>=0;--i){
52+
res[i] = pq.top().first;
53+
pq.pop();
54+
}
55+
return res;
56+
}
57+
};
58+
// @lc code=end
59+
60+
61+
62+
/*
63+
// @lcpr case=start
64+
// [1,1,1,2,2,3]\n2\n
65+
// @lcpr case=end
66+
67+
// @lcpr case=start
68+
// [1]\n1\n
69+
// @lcpr case=end
70+
71+
// @lcpr case=start
72+
// [1,2,1,2,1,2,3,1,3,2]\n2\n
73+
// @lcpr case=end
74+
75+
*/

0 commit comments

Comments
 (0)