常用的算法--尺取法(双指针 )

本文介绍了双指针(又称尺取法)在数组、链表和字符串中的应用,重点讨论了反向(相遇问题)和同向(追及,滑动窗口)两种情况。通过实例解析了如何利用双指针解决回文判断和有序数组平方等问题,强调了双指针在降低时间空间复杂度方面的作用。
摘要由CSDN通过智能技术生成

介绍: two pointers

我这里以数组为介绍又叫双指针,假定有指针名 i,和j。(常见于:数组、链表、字符串

有助于将很多个for循环降低循环的

1.>--反向(相遇问题):

我们可以有反向的指针i和j【“左右指针”】,方向相反的运动(更新i或者j的值,i从前到尾,j变从我们最大数组的元素个数开始往前和i指针在中间汇合便结束

【我第一次接触反向扫描的时候,先想到的就是小学时期,时常遇到的题:A地一货车B地有轿车,他们以不同的速度,什么时候会遇见】

我在做双指针(反向)题的时候时常遇到的一般就是判断数组、字符串、数字等是否是回文的。

对比:


//这是O(n^2的时间复杂度
for(int i=0;i<n;i++)       //i从头扫到尾
for(int j=n-1;j>0;j--)   //j从尾扫到头
        ......

经历了学习尺取法我们可以看到巨大的变化 :

两种写法【while循环和for循环减少空间和时间复杂度。将O(n^2)化为O(n)的。


i = 0; j= n - 1
while (i < j) {
       ......         
       i+=1;          //i从头扫到尾
       j-=1;          //j从尾扫到头
}

或者:我前面的文章中就提到过for循环的写法其中是while循环写法的一种缩写变形<

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你会魔法吗✧(≖ ◡ ≖✿)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值