Leetcode27. 移除元素(双指针法)

这里引用知乎一篇文章说明双指针的是什么:

什么是双指针(对撞指针、快慢指针)

双指针,指的是在遍历对象的过程中,不是普通的使用单个指针进行访问,而是使用两个相同方向(快慢指针)或者相反方向(对撞指针)的指针进行扫描,从而达到相应的目的。

换言之,双指针法充分使用了数组有序这一特征,从而在某些情况下能够简化一些运算。

总之:双指针分为同向和反向,处理有某一特征数据,用于简化运算。

对于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;
    }
};

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值