这里引用知乎一篇文章说明双指针的是什么:
什么是双指针(对撞指针、快慢指针)
双指针,指的是在遍历对象的过程中,不是普通的使用单个指针进行访问,而是使用两个相同方向(快慢指针)或者相反方向(对撞指针)的指针进行扫描,从而达到相应的目的。
换言之,双指针法充分使用了数组有序这一特征,从而在某些情况下能够简化一些运算。
总之:双指针分为同向和反向,处理有某一特征数据,用于简化运算。
对于Leetcode27.移除元素,要求修改原数组,并返回有效长度
很明显的快慢指针:
快慢指针均从下标0开始,
慢指针用于填充数组,快指针用于寻找有效元素,
慢指针填充一个,自增一次,快指针正常遍历数组,
快指针遍历完成,循环结束,慢指针在填充完有效数组后自增一,刚好是有效长度,返回即可。
代码如下:
class Solution { public: int removeElement(vector<int>& nums, int val) { int slow=0; for(int f=0;f<nums.size();f++){ if(nums[f]!=val){ nums[slow++]=nums[f]; } } return slow; } };