<p>You are given an integer array <code>nums</code> and an integer <code>k</code>. Find the maximum subarray sum of all the subarrays of <code>nums</code> that meet the following conditions:</p>

<ul>
	<li>The length of the subarray is <code>k</code>, and</li>
	<li>All the elements of the subarray are <strong>distinct</strong>.</li>
</ul>

<p>Return <em>the maximum subarray sum of all the subarrays that meet the conditions</em><em>.</em> If no subarray meets the conditions, return <code>0</code>.</p>

<p><em>A <strong>subarray</strong> is a contiguous non-empty sequence of elements within an array.</em></p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>

<pre>
<strong>Input:</strong> nums = [1,5,4,2,9,9,9], k = 3
<strong>Output:</strong> 15
<strong>Explanation:</strong> 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
</pre>

<p><strong class="example">Example 2:</strong></p>

<pre>
<strong>Input:</strong> nums = [4,4,4], k = 3
<strong>Output:</strong> 0
<strong>Explanation:</strong> 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.
</pre>

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>1 &lt;= k &lt;= nums.length &lt;= 10<sup>5</sup></code></li>
	<li><code>1 &lt;= nums[i] &lt;= 10<sup>5</sup></code></li>
</ul>

class Solution(object):
    def maximumSubarraySum(self, nums, k):
        mp = {}  # Dictionary to keep track of the frequency of elements in the current window
        n = len(nums)  # Length of the input array
        ans, sum, i = 0, 0, 0  # Initialize the maximum sum (ans), current sum (sum), and start pointer (i)

        # Iterate through the array with the end pointer `j`
        for j in range(n):
            sum += nums[j]  # Add the current element to the sum
            
            # Check if the current element is already in the map
            if nums[j] in mp:
                mp[nums[j]] += 1  # If it is, increment its frequency
            else:
                mp[nums[j]] = 1  # If it is not, add it to the map with a frequency of 1
            
            # Check if the current window size is equal to `k`
            if j - i + 1 == k:
                # If all elements in the window are unique (size of map equals `k`), update the maximum sum
                if len(mp) == k:
                    ans = max(ans, sum)
                
                # Slide the window: remove the influence of the element at the start of the window
                sum -= nums[i]  # Subtract the element at the start of the window from the sum
                mp[nums[i]] -= 1  # Decrease the frequency of the start element in the map
                
                # If the frequency of the start element becomes 0, remove it from the map
                if mp[nums[i]] == 0:
                    del mp[nums[i]]
                
                i += 1  # Move the start pointer `i` forward to shrink the window
        
        return ans  # Return the maximum sum of a subarray of length `k` with unique elements
571