力扣刷题-数组篇-移除元素

6 篇文章 0 订阅
4 篇文章 0 订阅

一. 题目描述

在这里插入图片描述

二. 思考步骤

  1. 先采用暴力求解:就是使用两个for循环,一个用于遍历数组的元素并找到需要删除的元素的位置,另一个循环用于覆盖需要删除的元素,即删除一个元素,便将后面的所有元素依次往前面挪一个位置,将原先的元素覆盖掉。
    代码示例:
    在这里插入图片描述(第一次运行结果出现错误,因为没有考虑到一种情况,那就是当两个需要删除的元素相邻的时候,例如[0,1,2,2,3,0,4,2],删除2,将第三个元素覆盖了以后,原先第四个位置的2又会补充到第三个位置上去了,然而循环会往下进行遍历到第四个位置,这个时候的第四个位置是3,这样就完美错过了,怎么解决这个问题呢?目的就是要将被覆盖的位置重新再检测一遍,由于循环会往后进行,就是i会加1,我们可以设置每当覆盖元素后i减1,使得i不动,实现将被覆盖的位置重新再检测一遍的行为)

成功代码示例:
在这里插入图片描述
2. 双指针法:这里我们采用的策略,是用一个快指针来遍历整个数组中需要留下的元素(也就是不需要删除的元素),用一个慢指针作为数组的下标重新为该数组赋值。快指针每遍历一个需要留下的元素,就赋给给慢指针所在的位置,若遇到需要删除的元素,快指针可直接跳过,慢指针依旧不动(因为慢指针只需要留下的元素),快指针则是找到需要留下的元素,而慢指针是将需要留下的元素重新赋值给数组!
代码成功示例:
在这里插入图片描述(注意:若是考虑算法的时间复杂度,暴力方法的平均时间复杂度无疑是o(nn),而双指针法在最坏的情况之下也是o(nn),例如数组中不存在需要删除的元素,两个指针就会都遍历数组一次,等同于两个for循环)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值