题目
- 给定一个数组,和一个数字 k,求长度为 k 的连续子数组的和,要求子数组的元素都唯一
- 求满足条件的子数组之和的最大值
思路
- 窗口大小 k,滑动窗口,统计窗口内数字的出现频率
代码
class Solution {
public:
long long maximumSubarraySum(vector<int>& nums, int k) {
long long ans = 0, sum = 0;
unordered_map<int, int> count_map;
for (int i = 0; i < nums.size(); i++) {
sum += nums[i];
count_map[nums[i]]++;
if (i >= k) {
sum -= nums[i - k];
count_map[nums[i - k]]--;
if (count_map[nums[i - k]] == 0)
count_map.erase(nums[i - k]);
}
if (i >= k - 1) {
if (count_map.size() == k)
ans = max(ans, sum);
}
}
return ans;
}
};