【总结】双指针法在查找搜索时的妙用

一、双指针法

二分查找,滑动窗口都是双指针法的应用。

只要遇见在序列中查找某值,或者搜索出特定子集,都可以首先考虑双指针法。因为既容易思考,又比嵌套循环的时间复杂度低,其通常是O(n)。

思路:

1、两个指针的起始位置(一左一右or同时在左or同时在右?)

2、指针储存的数据:索引

3、指针移动的条件(左指针和右指针移动的条件不一定相同)

4、退出循环的情况(当指针重叠时如何处理?)

二、应用

1、二分查找

思路:

1、两个指针的起始位置(一左一右or同时在左or同时在右?):一左一右

2、指针储存的数据(是元素本身or元素索引?):索引

3、指针移动的条件(左指针和右指针移动的条件不一定相同):若target大于中间值,则left = 中间值+1,否则right = 中间值-1

4、退出循环的情况(当指针重叠时如何处理?):找到target或者左右指针重叠(没找到)

2、滑动窗口

 

思路:

1、两个指针的起始位置(一左一右or同时在左or同时在右?):同时在左

2、指针储存的数据(是元素本身or元素索引?):索引

3、指针移动的条件(左指针和右指针移动的条件不一定相同):若sum不够target移动右指针(即:扩展子序列);否则,移动左指针(即:缩短子序列)

4、退出循环的情况(当指针重叠时如何处理?):右指针等于len-1

过程中,记录满足条件的最小序列长度。

三、总结

1、两个指针的起始位置(一左一右or同时在左or同时在右?)

一左一右:一般是采用贪心算法来移动左右指针,无法遍历完整个情况

同时在左or同时在右:这种两个指针会同时遍历完整个序列

2、指针储存的数据(是元素本身or元素索引?)

一定是储存索引,这样才能方便移动。(我老是第一反应是元素本身,所以单独把这条列出来提醒自己)

3、指针移动的条件(左指针和右指针移动的条件不一定相同)

按照题目情况来思考

4、退出循环的情况(当指针重叠时如何处理?)

待补充

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值