讲解一下什么是滑动窗口?
滑动窗口就是一个同向双指针利用单调性的两个指针区间为窗口,right指针往右移动则是入窗口,left指针往右移动则是出窗口,我们用的步骤如下图:
构造一个hash函数表,将right和left从0开始,不断的将right的值存入到hash表中,如果发现表中存入了两个了,那么就更新left的值,并进行更新ret。
此时定义一个ret用来记录走过的0的个数,right走过一个0就加加,left走过一个0就减减,我们循环的条件在于:当right指针遇见1的时候,一直往右走直到遇见0,每遇见一个0就将ret进行加加,直到ret的个数比k大的时候就需要出窗口了,也就是我们的left指针往右移动,直到找到0,每遇见一个0就将ret减减再left往右走一步,这个判断跳出条件在于ret<k,而在每次进行这个操作的时候,我们都进行算一下下标,也就是中间有多少个元素,最终等right到最后一个位置的下一个位置的时候,我们就结束。
NO1.利用unordered_map容器来进行解决,但算法复杂度太高
No2.用hash数组进行解决,算法复杂度低