给定一个正整数数组 A,如果 A 的某个子数组中不同整数的个数恰好为 K,则称 A 的这个连续、不一定不同的子数组为好子数组。
(例如,[1,2,3,1,2] 中有 3 个不同的整数:1,2,以及 3)
返回 A 中好子数组的数目。
示例 1:
1 | 输入:A = [1,2,1,2,3], K = 2 |
示例 2:
1 | 输入:A = [1,2,1,3,4], K = 3 |
思维+双指针~
利用双指针,当我们固定左端点时,可以找到恰好存在 K 个不同整数的最大右边界 $R$,那么我们只需找到最小左边界 $L$,答案就是 $R-L+1$,那么这个最小左边界怎么找呢,我们可以再加一个指针,这个指针指向恰好存在 K-1 个不同整数的最大右边界 $R’$,答案就是 $R-R’$,AC代码如下:
1 | class Solution { |