Article directory
topic
Leetcode 992. Subarray of K different integers
Code (9.27 first brush to see the analysis)
Sliding window, exactly converted to: at most K different numbers - at most K-1 different numbers
class Solution {
public:
int subarraysWithKDistinct(vector<int>& nums, int k) {
return help(nums, k) - help(nums, k-1);
}
int help(vector<int>& nums, int k) {
int n = nums.size();
vector<int> window(n+1);
int l = 0, r = 0;
int res = 0;
int cur = 0;
while(r < n) {
int num = nums[r++];
if(!window[num])
cur++;
window[num]++;
while(cur > k) {
int num2 = nums[l++];
window[num2]--;
if(!window[num2])
cur--;
}
res += r-l;
}
return res;
}
};
You can also take a look at this similar question: 1248. Statistics of "Elegant Subarrays"