LeetCode经典题目之滑动窗口与双指针法的使用

题目位置:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/submissions/

之前一篇文章中记录了双指针法。这里再来详细的介绍一下双指针法。

双指针法的时间复杂度一般是O(n),可以作为暴力二次循环的优化解法。利用双指针法可以不用遍历每个子数组而只要循环数组一次或者两次。有点类似二分查找,双指针法也是通过一步步缩小范围来确定答案的。只不过二分查找是一个指针双向移动,而双指针是两个指针单向移动。

二分查找用来查找一个变量,而双指针法一般用于求解由两个变量组成的子串子数组问题。拿这道题目为例,子串可以变长也可以变短,而变长和变短如果使用一个指针则会返回之前的状态陷入循环,所以需要双指针来从不同的角度使数组变长变短。

两个指针的位置,移动方向都不是固定的,可以向相同方向移动,也可以相反,也可以从任意位置开始移动,视具体情况而定,但是,每个指针只能往一个方向移动,而且它们对待定结果的影响是相反的,比如右指针使窗口变长,左指针使它变短。

 还有就是解题方面的细节,注意使用C++刷LeetCode的时候,所有的变量都必须要初始化,数组也要。比如这里的数组exist,就需要一个循环将它的每一位都初始化为0。如果不进行初始化的话,就会出现提交结果和执行结果不一样的问题。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值