双指针问题要回答几个问题
- 要不要将数组排序
- 两个指针是有共同的起点还是两个指针一个在左一个在右(也就是所谓的对撞指针)
- i什么时候走,j什么时候走,i走不走是否受到j的影响
三数之和
https://leetcode.cn/problems/3sum/?envType=study-plan-v2&envId=top-100-liked
- 要排序,因为要根据左右两个指针所在位置的元素之和的大小移动两个指针
- 应该碰撞指针,一般有序数组都用碰撞指针
- 之和小于目标值移动左指针,之和大于目标值移动右指针
移动0
https://leetcode.cn/problems/move-zeroes/description/?envType=study-plan-v2&envId=top-100-liked
- 不要排序,因为排序会改变顺序
- 不是有序数组一般不用碰撞指针,况且如果指针一左一右则交换后会将后面的元素移动到前面来
- 当快指针没有指向目标值则交换快慢指针所在位置的元素并且移动慢指针,快指针每次都移动