【leetcode】移除元素——双指针法

class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        int slow=0;
        int fast=0;
        for(fast=0;fast<nums.size();fast++)
        if(nums[fast]!=val){
            nums[slow]=nums[fast];
            slow++;
        }
        return slow;
    }
};

双指针法主要在于理解思想,代码很简单。时间复杂度为O(n)。

首先删除数组中的元素本质上都是覆盖,数组的size会随着删除元素变小,而capacity不会改变。

fast元素遍历数组,如果数组元素不是所要删除的元素,那么slow元素也++到下一个。如果fast遍历到了要删除的元素,则slow不动,fast继续前进直到不是删除的元素位置,slow位置的元素替换成fast位置的元素,slow的位置++(此时fast是不等于slow的)。fast遍历结束后,slow元素位置指向的是新数组的最后一个位置(fast指向的是物理空间上的最后一个元素,覆盖之后空出来的位置放置的还是原来的元素)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值