<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:
    def maximumSubarraySum(self, nums: List[int], k: int) -> int:
        def check(count,k):
            if(len(count)>k):
                return True
            for k,v in count.items():
                if(v>1):
                    return True
            return False
                
        maxi=0
        total=0
        #queue=deque()
        start=0
        end=0
        count=defaultdict(int)
        while(end<len(nums)):
            if(start<=end-k):
               # total-=nums[queue.popleft()]
                count[nums[start]]-=1
                total-=nums[start]
                if(count[nums[start]]==0):
                    del count[nums[start]]
                start+=1
            count[nums[end]]+=1
            total+=nums[end]
            while(count[nums[end]]>1):
               # count=defaultdict(int)
                count[nums[start]]-=1
                total-=nums[start]
                #count[nums[end]]+=1
                if(count[nums[start]]==0):
                    del count[nums[start]]
                start+=1 
            if(len(count)==k):
               # print(count,end)
                maxi=max(maxi,total)
            end+=1
            # if(end>=k-1):
            #     while(check(count,k)):
            #       #  print(count)
            #         count[nums[start]]-=1
            #         total-=nums[start]
            #         if(count[nums[start]]==0):
            #             del count[nums[start]]
            #         start+=1
            #     if(len(count)==k):
            #         maxi=max(maxi,total)
            # end+=1
        return maxi
        
656