滑动窗口 Sliding Window
基本概念:一般结合while循环用,滑动窗口是一种基于双指针的一种思想,两个指针指向的元素之间形成一个窗口。优点是减少了重复计算,减少时间复杂度。一般看到数组中的定长问题(比如说给你一个数组,让你求出以k为长度的最大的和或最小的和),或者找出最长子串就要想到用滑动窗口法。
分类:窗口有两类,一种是固定大小类的窗口,一类是大小动态变化的窗口。
举个例子:
有一个数组,连续的3个为一组,取最大的和。普通的做法就如下图所示,但这样有一个问题,就是每次求和都要对3个数算2次加法,如果连续的10000个为一组,那每次算的加法次数就很多:
而滑动窗口法就是每次只用把出去的那个数减掉,再加上后面的那个数,一样的能求出连续3个的和,这样就减少了两个窗口重合部分的数相加的次数。