1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| #include <unordered_map> #include <queue> #include <vector> #include <utility> using std::vector; using std::unordered_map; using std::priority_queue; using std::pair;
class Solution { int get_x_sum(vector<int> &nums, int start, int end, int x) { unordered_map<int, int> mp; priority_queue<pair<int, int>, vector<pair<int, int> > > max_heap; int n = start - end; int i, sum = 0; for (i = start; i < end; i++) { mp[nums[i]]++; sum += nums[i]; } if (mp.size() < x) { return sum; }
for (auto [num, count] : mp) { max_heap.push({ count, num }); } sum = 0; for (i = 0; i < x; i++) { auto [count, num] = max_heap.top(); sum += count * num; max_heap.pop(); } return sum; }
public: vector<int> findXSum(vector<int> &nums, int k, int x) { int i, n = nums.size(); vector<int> answer(n - k + 1);
for (i = 0; i < n - k + 1; i++) { answer[i] = get_x_sum(nums, i, i + k, x); } return answer; } };
|