|
| 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