双指针法:
双指针法
通常用在线性的数据结构中,比如链表(结点)和数组(索引)。
指针其实就是数据的索引或者链表的结点。两个指针朝着左右两个方向移动,直到满足搜索条件。
同向双指针---删除数组或链表中重复的元素,(线性表前提是有序的);
快慢指针---一般用在链表中,比如求链表的中点、判断链表是否有环、判断链表换的起点、环的长度、以及链表的倒数第K个元素;
异向双指针---比如在二分查找中用的就是;
滑动窗口---其实就是在数组或者链表某个区间上的操作,比如求最长/最短子字符串或是特定子字符串的长度要求。
滑窗法应用情况:
查找满足一定条件的连续区间的性质(长度等)的问题
“请找到满足xx的最x的区间(子串、子数组)的xx”
滑窗法
while(right < s.size()) { //双层while实现
window.add(s[right]);
while (window 符合要求) { // 如果符合要求,移动 left 缩小窗口,查看是否有更优解
res = minLen(res, window); // 即如果这个窗口的子串更短,则更新 res
window.remove(s[left]);
left++;
}
right++;
}
return res;
}