题目链接
https://leetcode.com/problems/subarrays-with-k-different-integers/
题目描述
给定一个元素均为正整数的数组A,如果A的某个子数组(元素索引连续,且可以有重复元素)中不同整数的个数恰好为K,则称A的这个子数组为好子数组。返回A中好子数组的数目。(从示例中可以看出,内容相同但起始终止索引不同的子数组被认为是不同的子数组)
示例
输入:A=[1,2,1,2,3],K=2
输出:7
恰好由2个不同整数组成的子数组: [1,2],[2,1],[1,2],[2,3],[1,2,1],[2,1,2],[1,2,1,2]
解题思路
滑动窗口算法可以将嵌套的循环问题转化为单循环问题,从而降低时间复杂度。在滑动窗口算法中,要根据条件固定左右指针中的某一个,然后移动另外一个。比如在【leetcode-Python】-滑动窗口-76. Minimum Window Substring(最小覆盖子串)返回s中涵盖t中所有字符的最小子串问题中,首先右指针右移,直到窗口内元素能够包含t中所有字符,左指针右移缩小窗口试图找到更小的子串,直到窗口内不能覆盖t,再次右移右指针。
常规滑动窗口算法适用的题目条件: