双指针的快慢指针和对撞指针
Posted 三水草肃
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了双指针的快慢指针和对撞指针相关的知识,希望对你有一定的参考价值。
双指针
- slow指针:指向已经处理过的最后一个元素
- fast指针:指向正在处理的元素
快慢指针
- 一个快指针,一个慢指针
解释: 当快指针满足条件的时候,与慢指针,进行交换
对撞指针
- 一个left头指针,一个right尾指针
- 当尾指针满足条件的时候,与头指针,进行交换
- while结束条件 left <= right, slice(0, right)是符合条件的结果
- 遇到要删除的元素,我们使用数组最后一个元素来替换这个元素
- 替换后的数字有可能也是要删除的元素,那就接着判断
- 但是至少,我们从数组最后删除了一个元素
// 快慢指针
function removeSameFn2<T>(nums: T[], val: T): number
if (!nums || nums.length === 0) return 0;
let slow = 0;
let fast = 0;
while (fast < nums.length)
if (nums[fast] !== val)
nums[slow] = nums[fast];
slow++;
fast++;
return slow;
console.log(removeSameFn2([1, 2, 3, 5, 6, 4, 3, 3, 4, 4], 3));
// 对撞指针
function removeSameFn3<T>(nums: T[], val: T): T[] | number
if(!nums || nums.length === 0) return 0;
let left = 0;
let right = nums.length - 1;
while(left <= right)
// 遇到要删除的元素,我们使用数组最后一个元素来替换这个元素
// 替换后的数字有可能也是要删除的元素,那就接着判断
// 但是至少,我们从数组最后删除了一个元素
if(nums[left] === val)
nums[left] = nums[right];
right--;
else
left++;
return right + 1;
console.log(removeSameFn3([1, 2, 3, 5, 6, 4, 3, 3, 4, 4], 3));
以上是关于双指针的快慢指针和对撞指针的主要内容,如果未能解决你的问题,请参考以下文章