【数组专题】—— 快慢指针

快 慢 指 针 \color{blue}{快慢指针}

1、首先什么是快慢指针呢?

利用不同速度的"指针"来解决一些实际问题。主要应用在数组、链表、序列中。


2、LeetCode 27. 移除元素

(1) 以这道题为例,来简述快慢指针的应用

(2) 快指针fast指向当前要对比的元素,慢指针slow指向将要赋值的元素。

(3)遍历数组,如果 nums[fast] != val,说明是我们要保留的元素,将当前快指针指向的元素赋值给慢指针指向的位置。nums[slow] = nums[fast]

在完成赋值之后,要移动慢指针的位置到下一位,因为在外层for循环中已经完成了快指针的移动,所以不需要再对快指针进行操作了。

相反,如果满足要删除元素的条件了,无需对慢指针进行操作,直接向后移动一次快指针即可。

(4)在完成数组的便利之后,因为slow是从零开始的,所以此时slow的值就是要保留的元素组成的数组的长度。


3.代码部分

class Solution {
    public int removeElement(int[] nums, int val) {
        //设置快慢指针
        int fast = 0;
        int slow = 0;

        //设置for循环,快指针遍历整个数组
        for(; fast < nums.length; fast++){
            if(nums[fast] != val){
                nums[slow] = nums[fast];
                slow++;
            }
        }
        return slow;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bow.贾斯汀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值