Skip to content

Commit 837e0f8

Browse files
authored
Create high-five.cpp
1 parent c51848e commit 837e0f8

File tree

1 file changed

+43
-0
lines changed

1 file changed

+43
-0
lines changed

C++/high-five.cpp

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
// Time: O(nlogn)
2+
// Space: O(n)
3+
4+
class Solution {
5+
public:
6+
vector<vector<int>> highFive(vector<vector<int>>& items) {
7+
map<int, priority_queue<int, vector<int>, greater<int>>> min_heaps;
8+
for (const auto& item: items) {
9+
min_heaps[item[0]].emplace(item[1]);
10+
if (min_heaps[item[0]].size() > 5) {
11+
min_heaps[item[0]].pop();
12+
}
13+
}
14+
15+
vector<vector<int>> result;
16+
for (auto& [i, min_heap] : min_heaps) {
17+
int total = 0, count = min_heap.size();
18+
while (!min_heap.empty()) {
19+
total += min_heap.top(); min_heap.pop();
20+
}
21+
result.push_back({i, total / count});
22+
}
23+
return result;
24+
}
25+
};
26+
27+
// Time: O(nlogn)
28+
// Space: O(n)
29+
class Solution2 {
30+
public:
31+
vector<vector<int>> highFive(vector<vector<int>>& items) {
32+
vector<vector<int>> result;
33+
map<int, vector<int>> students;
34+
for (const auto& item : items) {
35+
students[item[0]].push_back(item[1]);
36+
}
37+
for (auto& [i, scores] : students) {
38+
partial_sort(scores.begin(), scores.begin() + 5, scores.end(), greater<int>());
39+
result.push_back({i, accumulate(scores.cbegin(), scores.cbegin() + 5, 0) / 5});
40+
}
41+
return result;
42+
}
43+
};

0 commit comments

Comments
 (0)