【数据结构与算法】删除线性表中的零元素


题目

删除顺序结构线性表中的零元素,不改变原表的顺序。

input:
10,2,0,0,5,7,0,4,0,0
output:
10,2,5,7,4

解决

解法一
发现一个零元素,就删除一个。将后面的元素前移,数组长度减一。

解法二
开始:设置两个指针变量,储存数组的下标。

在遍历数组过程中,让左指针指向非零元素后出现的第一个零元素,右指针指向零元素后出现的第一个非零元素。

达成条件后,交换左右指针所指元素,左指针右移一位。

交换完毕后继续遍历,直到数组右侧全是零元素。

结束:此时左指针指向第一位零元素,只需要将数组的长度设置为左指针减一即可。

解法三

遍历数组,当出现零元素的时候,用一个变量k记录数组中为零元素的长度,碰见非零元素的时候,让非零元素前移k个位置。

直到数组遍历完毕。将数组的长度设置为原长减k即可。

吐槽:

  • 解法三我在看的时候,还以为会漏掉元素,或者,受前一个用交换的解法惯性影响担心:用前移的办法,后面的非零元素没有改变,会影响到下一次 “交换” 操作。
  • 但是这个解法没有用上交换,而是在前移的过程中直接覆盖掉前面遗留下来的元素。
  • 这其实很好理解,由零元素长度形成的一个不断增长的挡板将判断过的非零元素覆盖掉,因而不用改变后面的非零元素,最后挡板移到数组末尾,问题解决。

延伸

这类问题可以理解为在遍历线性表时,记录下满足条件的元素个数k(可以是x—y范围内的元素个数),对于不满足条件(x—y范围外的元素),前移k个位置,最后修改线性表的长度。

对于原题,这个条件范围缩小到等于0,非零元素前移。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

YUMIAKIRA

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

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

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

打赏作者

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

抵扣说明:

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

余额充值