Skip to content

2537. Count the Number of Good Subarrays

Difficulty Topics

Description

Given an integer array nums and an integer k, return the number of good subarrays of nums.

A subarray arr is good if it there are at least k pairs of indices (i, j) such that i < j and arr[i] == arr[j].

A subarray is a contiguous non-empty sequence of elements within an array.

 

Example 1:

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

Example 2:

Input: nums = [3,1,4,3,2,2,4], k = 2
Output: 4
Explanation: 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.

 

Constraints:

  • 1 <= nums.length <= 105
  • 1 <= nums[i], k <= 109

Solution

count-the-number-of-good-subarrays.py
class Solution:
    def countGood(self, nums: List[int], k: int) -> int:
        N = len(nums)
        cnt = defaultdict(int)
        pairs = 0
        res = 0
        i = 0

        for j, x in enumerate(nums):
            pairs += cnt[x]
            cnt[x] += 1

            while pairs >= k:
                res += (N - j)
                pairs -= cnt[nums[i]] - 1
                cnt[nums[i]] -= 1
                i += 1

        return res