双指针的快慢指针和对撞指针

Posted 三水草肃

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了双指针的快慢指针和对撞指针相关的知识,希望对你有一定的参考价值。

双指针

  1. slow指针:指向已经处理过的最后一个元素
  2. fast指针:指向正在处理的元素

快慢指针

  1. 一个快指针,一个慢指针
    解释: 当快指针满足条件的时候,与慢指针,进行交换

对撞指针

  1. 一个left头指针,一个right尾指针
  2. 当尾指针满足条件的时候,与头指针,进行交换
  3. while结束条件 left <= right, slice(0, right)是符合条件的结果
    1. 遇到要删除的元素,我们使用数组最后一个元素来替换这个元素
    2. 替换后的数字有可能也是要删除的元素,那就接着判断
    3. 但是至少,我们从数组最后删除了一个元素
// 快慢指针
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));

以上是关于双指针的快慢指针和对撞指针的主要内容,如果未能解决你的问题,请参考以下文章

算法复习:双指针(对撞指针快慢指针)

双指针问题复习

2021/5/23 刷题笔记三数之和与双指针法

算法模板-双指针

算法模板-双指针

Java版算法思想双指针算法