定义与原理
双指针算法是指在遍历数据结构(如数组、链表等)时,使用两个指针(可以理解为变量,存储着数据结构中的索引或节点引用),通过改变这两个指针的位置,按照一定规则对数据进行遍历、比较、操作等,以达到高效解决问题的目的 。
常见类型及应用场景
同向双指针原理:两个指针从数据结构的同一端(如数组开头)出发,朝着同一方向移动。通常一个指针移动得快(快指针),一个移动得慢(慢指针) 。
应用场景:数组去重:在有序数组中,快指针遍历数组,慢指针指向不重复元素应存放的位置。当快指针遇到与慢指针指向元素不同的值时,将其赋给慢指针后移一位的位置。
寻找满足条件的子数组:例如在一个整数数组中,寻找和等于特定值的连续子数组,快指针不断扩大子数组范围,慢指针在和超过目标值时收缩范围。
对向双指针原理:两个指针分别从数据结构的两端(如数组的开头和结尾)出发,相向移动。在移动过程中根据一定条件进行操作。
应用场景:求解容器盛水问题:如前面提到的 “盛最多水的容器” 问题,通过左右指针不断向中间移动,计算不同位置构成容器的面积并更新最大值。
判断回文串:对于字符串,一个指针从字符串开头,一个从结尾,向中间移动,依次比较对应位置字符是否相等来判断是否为回文串。
固定一个指针,移动另一个指针原理:固定一个指针位置不变,另一个指针在数据结构中移动,用于解决一些需要固定参照点进行比较、查找等的问题。