[算法]双指针用法

快慢指针

概念

  • 快指针的步长比慢指针的步长多
  • 快指针慢指针步长一致,快指针先走n步
  • 双指针在有序数组中应用用以范围逼近

应用

  • 链表中点
faster = faster.next.next, slower = slower.next.
  • 链表倒数第n个
for(i=0;i<n;i++)
    {
        p1=p1->next;
    }
while(p1->next)
    {
        p1=p1->next;
        p2=p2->next;
    }
  • 查找和为n的数组元素
while(j<k)
    {
        if(nums[j]+nums[k]==target)
        {
            vector<int> temp = { nums[i],nums[j],nums[k]};
            res.insert(temp); 
            j++,k--;
        }
        if(nums[j]+nums[k]>target)
            k--;
        if(nums[j]+nums[k]<target)
            j++;
    } 

猜你喜欢

转载自www.cnblogs.com/wendyy/p/9316807.html