Count Distinct Elements in Every Window of Size K.
Given an array of n integers and an integer k (k is always smaller or equal to n). Return the count of distinct elements in all windows (or in all sub-arrays) of size k.
For example –
Example 1:
Input: {1, 5, 9, 3, 3, 7, 3}, k = 3
Output: {3, 3, 2, 2, 2}
1st window {1, 5, 9}, Distinct elements are 3.
2nd window {5, 9, 3}, Distinct elements are 3.
3rd window {9, 3, 3}, Distinct elements are 2.
4th window {3, 3, 7}, Distinct elements are 2.
5th window {3, 7, 3}, Distinct elements are 2.
Example 2:
Input: {1, 4, 7, 7}, k = 2
Output: {2, 2, 1}
1st window {1, 4}, Distinct elements are 2.
2nd window {4, 7}, Distinct elements are 2.
3rd window {7, 7}, Distinct elements are 1.

In this problem, we have to find the distinct elements count in all the sub-arrays of size k. The size of output array is always n-k+1 (where n is the length of array, k is the size of window).
This problem can be efficiently solved through sliding window approach. I have also added video tutorial at the end of this post.
Count Distinct Elements in Every Window of Size K – Java Code
An efficient approach to solve this problem is to form a window of size k. After that put all the elements and it’s count of this window in a HashMap. The keys are always unique in a HashMap. So, the number of distinct elements present in this window is the size of a HashMap.
We have computed the result of one window. After that run a loop from 1 to n-k and do the following operations.
i) Remove previous element from a HashMap.
ii) Add new element in a HashMap. The count of distinct elements in this window is the size of HashMap.
The time and space complexity of this approach is O(n).