所谓 滑动窗口,就是不断的调节子序列的起始位置和终止位置,从而得出我们要想的结果。
划窗背后的原理:
1.本质上来说,滑窗是双指针,一根指针指向左端点,一根指针指向右端点。
2.右指针移动可以表示扩张窗口,左指针移动表示缩小窗口。
3.如果当前元素满足题目要求时,可以挪动右指针尝试更优解,并且更新需要记录的变量(元素,元素个数++等)
4.如果当前窗口内的元素不满足条件,可以挪动左指针尝试调整,并且更新需要记录的变量(元素,元素个数–等)
5.通过以上步骤窗口就开始“滑动”起来,在滑动过程中,要记得及时更新答案。一般为求最大或最小。
先给出滑动窗口算法框架:
/*滑动窗口算法框架*/
private static void minWindow(String s,String t){
//滑动窗口左右侧位置指针
int left = 0,right = 0;
while (right < s.length()){
//滑动窗口右边增加
right ++;
if(滑动窗口满足目标){
//对窗口内元素操作
}
//滑动窗口左边缩小
while(滑动窗口缩小条件){
//
left ++;
}
}
}