- 難度分: 1553
- 定長度的 sliding window,搭配對 window 檢查是否滿足條件
class Solution {
public:
long long maximumSubarraySum(vector<int>& nums, int k) {
int n = nums.size();
unordered_map<int, int> cnt;
long long sum = 0;
int valid = 0;
for (int i = 0; i < k; i++) {
sum += nums[i];
if (cnt[nums[i]]++ == 0) valid++;
}
long long res = valid == k ? sum : 0;
for (int i = k; i < n; i++) {
sum += (nums[i] - nums[i-k]);
if (cnt[nums[i]]++ == 0) valid++;
if (--cnt[nums[i-k]] == 0) valid--;
if (valid == k) res = max(res, sum);
}
return res;
}
};