双指针算法总结

一、双指针大概模板: 

1.真·双指针

int left,right;
for(left=0;left

2.假·双指针

这种双指针看起来像双指针,但是实际上另外一个指针只是代替本来的指针往后遍历
最后我们真正要处理的指针要跳到代替指针的位置上
for(int i=0;i

 

二、双指针可以维护的结构:

(1)两个数列的区间

(2)一个数列里面的多个区间

三、双指针的条件:

双指针大部分需要枚举其中一个指针,然后让另一个指针跟随着移动

 双指针应该满足单调性的条件,即:在一个指针(我们枚举的那一个)往一侧移动时,另外个指针也只能单向移动

详细步骤:

(1)先确定我们要枚举哪一个指针

(2)判断是否具有单调性

(3)最后证明如果题目存在一种解,是否可以通过我们设计的双指针算法找到这种解

        下面贴几道题目:

        800. 数组元素的目标和        799. 最长连续不重复子序列(好题,值得细看)

        2816. 判断子序列(这道题我写的代码有点冗杂,更好的代码可以看题解区的林小鹿)

        P7756 [COCI2012-2013#3] MALCOLM(哈希思想+双指针)

        102. 最佳牛围栏 - AcWing题库(这个双指针有点意思) 

        AcWing 907. 区间覆盖(特殊的双指针)

你可能感兴趣的:(基础算法,c++,算法)