## [2461\. Maximum Sum of Distinct Subarrays With Length K](https://leetcode.com/problems/maximum-sum-of-distinct-subarrays-with-length-k/)
You are given an integer array `nums` and an integer `k`. Find the maximum subarray sum of all the subarrays of `nums` that meet the following conditions:
- The length of the subarray is `k`, and
- All the elements of the subarray are **distinct**.
Return _the maximum subarray sum of all the subarrays that meet the conditions__._ If no subarray meets the conditions, return `0`.
_A **subarray** is a contiguous non-empty sequence of elements within an array._
**Example 1:**
**Input:** nums = \[1,5,4,2,9,9,9\], k = 3
**Output:** 15
**Explanation:** The subarrays of nums with length 3 are:
\- \[1,5,4\] which meets the requirements and has a sum of 10.
\- \[5,4,2\] which meets the requirements and has a sum of 11.
\- \[4,2,9\] which meets the requirements and has a sum of 15.
\- \[2,9,9\] which does not meet the requirements because the element 9 is repeated.
\- \[9,9,9\] which does not meet the requirements because the element 9 is repeated.
We return 15 because it is the maximum subarray sum of all the subarrays that meet the conditions
**Example 2:**
**Input:** nums = \[4,4,4\], k = 3
**Output:** 0
**Explanation:** The subarrays of nums with length 3 are:
\- \[4,4,4\] which does not meet the requirements because the element 4 is repeated.
We return 0 because no subarrays meet the conditions.
**Constraints:**
- `1 <= k <= nums.length <= 105`
- `1 <= nums[i] <= 105`
```cpp=
#define ll long long
class Solution {
public:
long long maximumSubarraySum(vector<int>& nums, int k) {
int n = nums.size();
ll res = 0, sum = 0;
unordered_map<int, int> freq;
for(int i = 0; i < k; i++) {
++freq[nums[i]];
sum += nums[i];
}
// base case
if(freq.size() == k)
res = sum;
int i = k;
for(int i = k; i < n; i++) {
++freq[nums[i]];
--freq[nums[i - k]];
if(freq[nums[i - k]] == 0)
freq.erase(nums[i - k]);
sum += nums[i];
sum -= nums[i - k];
// 維持 freq 的長度要等於 3
// 也就是 distinct element = 3
if(freq.size() == k)
res = max(res, sum);
}
return res;
}
};
```
:::success
- 時間複雜度:$O(N)$
- 空間複雜度:$O(1)$
:::