992.K个不同整数的子数组

思路:


class Solution {
public int subarraysWithKDistinct(int[] nums, int k) {
return atMostKDistinct(nums,k) - atMostKDistinct(nums,k-1);
}
//最多包含K个不同整数的子区间个数
private int atMostKDistinct(int[] a,int k){
int len = a.length;
int[] freq = new int[len + 1];
int left = 0,right = 0;
int count = 0,res = 0;
//[left,right)里不同整数的个数
while(right < len){
if(freq[a[right]] == 0){
count++;
}
freq[a[right]]++;
right++;
while(count > k){
freq[a[left]]--;
if(freq[a[left]] == 0){
count--;
}
left++;
}
res += right - left;
}
return res;
}
}



















![[开源]基于 AI 大语言模型 API 实现的 AI 助手全套开源解决方案](https://img-blog.csdnimg.cn/img_convert/76188c5e190503861b883f61284b150c.png)