时间轴
时间轴
2025-11-04
init
数组
题目:
直接暴力计算,用哈希表记录次数,用大顶堆排序。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 | using std::vector;using std::unordered_map;using std::priority_queue;using std::pair;class Solution { // [start, end) int get_x_sum(vector<int> &nums, int start, int end, int x) { unordered_map<int, int> mp; // 默认大顶堆, {val, key} 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; }}; |
