# 2537. Count the Number of Good Subarrays ###### tags: `Leetcode` `Medium` `Sliding Window` Link: https://leetcode.com/problems/count-the-number-of-good-subarrays/description/ ## 思路 ```currPairs```记录现在windows里有多少pairs 每次右指针移动 ```currPairs+=map.get(nums[r])``` 然后移动左指针直到```currPairs<k``` 那么以右指针为右边界的good subarray数就是l 因为l左边的所有index都可以当左边界 ## Code ```python= class Solution: def countGood(self, nums: List[int], k: int) -> int: count = Counter() ans = 0 left, right = 0, 0 pairsCnt = 0 for right in range(len(nums)): pairsCnt += count[nums[right]] count[nums[right]] += 1 while pairsCnt>=k: count[nums[left]] -= 1 pairsCnt -= count[nums[left]] left += 1 ans += left return ans ``` ```java= class Solution { public long countGood(int[] nums, int k) { int l=0, r=0; long res=0; int currPairs = 0; Map<Integer, Integer> cnt = new HashMap<>(); while(r<nums.length){ currPairs+=cnt.getOrDefault(nums[r], 0); cnt.put(nums[r], cnt.getOrDefault(nums[r], 0)+1); while(currPairs>=k){ cnt.put(nums[l], cnt.get(nums[l])-1); currPairs -= cnt.getOrDefault(nums[l], 0); l++; } res += l; r++; } return res; } } ```