leetcode——双指针总结

本文详细探讨了三种类型的双指针技巧:同向、相向和背向双指针,以及滑动窗口在数组和字符串操作中的应用。通过具体的题目实例,如合并有序数组、删除重复项、移动零、验证回文串、寻找数组中的目标和等,解析了这些技巧的解题思路和关键步骤。同时,区分了滑动窗口与同向双指针的差异,并总结了它们在不同场景下的适用性。
摘要由CSDN通过智能技术生成

一、高频题目

同向双指针

88. 合并两个有序数组——双指针
1、防止nums元素被改写,先摘录大的元素放入nums空白处
2、交叉摘录数组元素
3、单方摘录某数组元素

26. 删除有序数组中的重复项
1、i用于维护处理好的元素
2、j用于挑选未处理好的元素
3、当不重复 i++,j++ 重复时j++

283. 移动零
1、i用于维护处理好的非0元素
2、j用于挑选未处理好的元素
3、当 j 为非0元素时,交换i j的元素

相向双指针

125. 验证回文串——相向双指针
1、字母统一小写,过滤字符
2、双指针指向前后,字母相等则不断移动

167. 两数之和 II - 输入有序数组
1、数据已排序
2、根据双指针所加指的大小移动指针
3、若=target,返回答案
4、若>target,right–
5、若<target,left++

15. 三数之和
1、数组排序
2、取第一个元素为target,注意去重
3、双指针取second和third,second=first+1,third=size()-1
4、若second+third的值等于first,加入答案,双指针同时移动去重
5、若second+third的值小于first,second++
6、若second+third的值大于first,third–

16. 最接近的三数之和
1、数组排序
2、双指针取second和third,second=first+1,third=size()-1
3、sum=first+second+third
4、维护与target差值最小的sum

18. 四数之和——三数之和加多一层

背向双指针

5. 最长回文子串
1、利用中心扩展,求该中心的最长回文串left-- right++
2、将字符串的每个字母当成扩展中心,注意扩展中心可能为1个数 或两个数
3、擂台法保持最大回文串首尾位置
4、根据首尾位置从原字符串截取答案

滑动窗口

3. 无重复字符的最长子串
1、字母出现次数为1,left++,出现次数变为0
2、字母出现次数为0,right++,出现次数变为1
3、返回right-left的最大值

395. 至少有 K 个重复字符的最长子串

76. 最小覆盖子串

二、思考与收获

1、三种类型指针的区别?
同向双指针:指针向同一边移动,但是移动条件不同
相向双指针:指针从两头出发,向中间靠近
背向双指针:指针从中间出发,向两边靠近

2、滑动窗口类似哪种类型的指针?
同向双指针

3、滑动窗口与同向双指针的区别?
同向双指针通常是左指针左边是维护好的数据,右指针右边是未处理的数据
滑动窗口通常是对左指针与右指针中间的元素作判断处理,决定移动哪个指针

4、三种类型的指针通常对应什么样的应用?
同向双指针:原地修改,将符合的元素移动到一边
相向双指针:回文串的判断,排序好的数组找target
背向双指针:中心扩展法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值