LeetCode 2461 长度为 K 子数组最大和
🟡 中等
https://leetcode.cn/problems/maximum-sum-of-distinct-subarrays-with-length-k/description/
使用 hash_map 记录 value:count,
直接使用 hash_map[nums[i]]++; 完成插入和递增操作。
class Solution {
public:
long long maximumSubarraySum(vector<int>& nums, int k) {
if (k > nums.size()) return 0;
unordered_map<int, int> hash_map; // 用于存储元素及其出现次数
long long sum = 0;
long long max_sum = 0;
// 初始化窗口
for (int i = 0; i < k; i++) {
hash_map[nums[i]]++;
sum += nums[i];
}
// 检查初始化窗口
if (hash_map.size() == k) {
max_sum = sum;
}
// 滑动窗口
for (int i = k; i < nums.size(); i++) {
// 新元素进入窗口
hash_map[nums[i]]++;
sum += nums[i];
// 最左边元素出窗口
hash_map[nums[i - k]]--;
sum -= nums[i - k];
if (hash_map[nums[i - k]] == 0) {
hash_map.erase(nums[i - k]);
}
// 检查当前窗口
if (hash_map.size() == k) {
max_sum = max(max_sum, sum);
}
}
return max_sum;
}
};