文章目录
一、什么是双指针算法
双指针算法在面试里可以解决大部分array和linkedList的问题。 正常来说,我们遍历一个array或linkedList的方式是使用单个指针(index)。但有时候可以使用两个指针来解决复杂的数组问题。
二、三种双指针算法介绍
1.背向双指针
两个指针起始位置相同,背向朝两边移动。
背向双指针逻辑较为简单,在本文不细讲。
2.双线双指针
两个指针处理两个线性数据结构,如linkedList, array, string。
一般比较简单。
3.相向双指针
两个指针起始位置为开头和末尾,相向朝中间移动
相向双指针题型大致可细分为三类 :
- Reverse/Swapping
- Two sum
- Partition
4.同向双指针
两个指针起始位置均为开头,同向朝末尾移动。
同向双指针算法可细分为两类:
- Sliding window
- Fast & Slow pointers
三、模版归纳
1. Two Sum模版
Two Sum 题型的模版, 要使用这个模版必须保证array有序
while (left < right) {
int twoSum = array[left] + array[right];
if (twoSum > target) {
right--; //右指针左移减小twoSum
}
else