LeetCode刷题之指针与双指针
python中将指针进行封装,一切对象都有一个“变量”指向它。这个“变量”就是“指针”。常用于解决数组、链表等问题。
一、什么是双指针
双指针,指的是在遍历对象的过程中,不是普通的使用单个指针进行访问,而是使用两个相同方向(快慢指针)或者相反方向(对撞指针)的指针进行扫描,从而达到相应的目的。
1、对撞指针
对撞指针是指在有序数组中,将指向最左侧的索引定义为左指针(left),最右侧的定义为右指针(right),然后从两头向中间进行数组遍历。
对撞数组适用于有序数组。array 当中有*两类元素*,他们 *之间* 或者 *各自* 有某种顺序。维护两个 pointer,每个 pointer 负责一种一类,这样就能在保证顺序的情况下,进行某种操作。
伪代码参考
function fn (list) {
var left = 0;
var right = list.length - 1;
//遍历数组
while (left <= right) {
left++;
// 一些条件判断 和处理
... ...
right--;
}
}
2、快慢指针
快慢指针也是双指针,但是两个指针从同一侧开始遍历数组,将这两个指针分别定义为快指针(fast)和慢指针(slow),两个指针以不同的策略移动,直到两个指针的值相等(或其他特殊条件)为止,如fast每次增长两个,slow每次增长一个。
快慢指针一般用于链表。链表的 idexing 是很弱的,每次只能看到自己的 next(非常“短视”)。通过快慢指针,可以“之后”或者“之前”的一些元素,实际上是增加了“视野”。
一般能实现O(n)的时间解决问题,两个指针的位置一般在第一个元素和第二个元素或者第一个元素和最后一个元素,快指针在前“探路”,当符合某种条件时慢指针向前挪。
题目
删除排序链表中的重复元素 II.
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
参考:
https://zhuanlan.zhihu.com/p/71643340
https://zhuanlan.zhihu.com/p/101585882