> For the complete documentation index, see [llms.txt](https://coding-9.gitbook.io/untitled/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://coding-9.gitbook.io/untitled/sliding-window/medium/992.-subarrays-with-k-different-integers.md).

# 992. Subarrays with K Different Integers

## Problem Statement

<br>

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

A **good array** is an array where the number of different integers in that array is exactly `k`.

* For example, `[1,2,3,1,2]` has `3` different integers: `1`, `2`, and `3`.

A **subarray** is a **contiguous** part of an array.

&#x20;

**Example 1:**

<pre><code><strong>Input: nums = [1,2,1,2,3], k = 2
</strong><strong>Output: 7
</strong><strong>Explanation: Subarrays formed with exactly 2 different integers: [1,2], [2,1], [1,2], [2,3], [1,2,1], [2,1,2], [1,2,1,2]
</strong></code></pre>

**Example 2:**

<pre><code><strong>Input: nums = [1,2,1,3,4], k = 3
</strong><strong>Output: 3
</strong><strong>Explanation: Subarrays formed with exactly 3 different integers: [1,2,1,3], [2,1,3], [1,3,4].
</strong></code></pre>

&#x20;

**Constraints:**

* `1 <= nums.length <= 2 * 104`
* `1 <= nums[i], k <= nums.length`

## Intuition

```
Approach :
Use atmost approach to get exactly k elements

Basically at every point in high-low+1

We add extra subarrays

example 
1 2 1 2 3
l h

h-l+1
adds 2 here which is, 2, 1 2
Count 
```

### Links

<https://leetcode.com/problems/subarrays-with-k-different-integers/description/>

### Video Links

### Approach 1:

```
Atmost Sliding Window
```

{% code title="C++" lineNumbers="true" %}

```cpp
class Solution {
public:
    int Atmost(vector<int>& nums, int k){
        unordered_map<int, int> mp;
        int low=0;
        int ans=0;

        for(int high=0; high<nums.size(); high++){
            mp[nums[high]]++;

            while(mp.size() > k){
                if(mp[nums[low]] == 1)
                    mp.erase(nums[low]);
                else
                    mp[nums[low]]--;

                low++;
            }

            ans += high-low+1;
        } 

        return ans;
    }

    int subarraysWithKDistinct(vector<int>& nums, int k) {
        return Atmost(nums, k) - Atmost(nums, k-1);
    }
};
```

{% endcode %}

### Approach 2:

```
```

{% code title="C++" lineNumbers="true" %}

```cpp
```

{% endcode %}

### Approach 3:

```
```

{% code title="C++" lineNumbers="true" %}

```cpp
```

{% endcode %}

### Approach 4:

```
```

{% code title="C++" lineNumbers="true" %}

```cpp
```

{% endcode %}

### Similar Problems

<https://leetcode.com/problems/binary-subarrays-with-sum/description/>\
<https://leetcode.com/problems/count-number-of-nice-subarrays/description/>\ <br>

###
