双指针-快慢指针(移除元素)

什么是快慢指针?

    通俗来讲就是用一快、一慢两个指针(两个变量来记录两种状态。以达到遍历一次即可完成任务的目的。快慢指针比较经典的案例是解决是否有环的问题。

下面来道算法题感受下:

27. 移除元素

暴力求解:

首先考虑使用暴力求解。想象下生活中我们遇到这种问题是如何解决的呢。

比如日常生活中我们排队,假设队伍中有几个人走了。如果这个队伍很长,大家也不知道有空位可以向前走。那么就需要你从队头开始依次去看有没有空位,查看有几个空位后面的人需要向前走几步,然后让空位后面的人向前走。暴力求解就是这样的逻辑。

快慢指针:

其实你只需要走到每个空位处喊一句“此空位后的人向前走n部”即可。

func removeElement(nums []int, val int) int {
    l := 0 // 这就相当于检查空位的“你”
    for i := range nums {
        // 让后排的人依次向前
        if nums[i] != val {
            nums[l] = nums[i]
            l++
        }
    }
    return l
}

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值