<p>Given an integer array <code>nums</code> and an integer <code>k</code>, return <em>the number of <strong>good</strong> subarrays of</em> <code>nums</code>.</p>

<p>A subarray <code>arr</code> is <strong>good</strong> if it there are <strong>at least </strong><code>k</code> pairs of indices <code>(i, j)</code> such that <code>i &lt; j</code> and <code>arr[i] == arr[j]</code>.</p>

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

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

<pre>
<strong>Input:</strong> nums = [1,1,1,1,1], k = 10
<strong>Output:</strong> 1
<strong>Explanation:</strong> The only good subarray is the array nums itself.
</pre>

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

<pre>
<strong>Input:</strong> nums = [3,1,4,3,2,2,4], k = 2
<strong>Output:</strong> 4
<strong>Explanation:</strong> There are 4 different good subarrays:
- [3,1,4,3,2,2] that has 2 pairs.
- [3,1,4,3,2,2,4] that has 3 pairs.
- [1,4,3,2,2,4] that has 2 pairs.
- [4,3,2,2,4] that has 2 pairs.
</pre>

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

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

class Solution:
    def countGood(self, nums: List[int], k: int) -> int:
        #这个题很有意思 他是一个成对数
#1 单独不成对， 1 1 两个就是 1对 -- 1 1 1 三个应该是3对 他是1 1 的一对 + 后进来的1和前面两个的2对
        #这个用代码怎么记录呢 -- 我们发现Counter为1 - 0， 2 - 1， 3 - 2 + 1 -这个1是 2 - 1的1
        #也就是说 我的对数和这个数字出现的次数有关
        ans = left = pairs = 0
        cnt = Counter()
        #根据上面 你想一下我应该怎么更新pairs 呢
        for x in nums:
            pairs += cnt[x] #每一次多的就是我现在元素的数量对吧 -- 所以先+pairs再更新cnt
            cnt[x] += 1
            ans += left #找到了行的，那么他左侧都行 里面+1， 外面+left -- total - left + 1
            while pairs >= k: #里面只找到行的 - 第一个行后找到不行的左侧点 在上面再找到行的
                ans += 1
                cnt[nums[left]] -= 1
                pairs -= cnt[nums[left]]
                left += 1
        return ans
550