数组元素替换_算法实战(数组Array移动零)

给大家推荐leetcode网站进行算法刷题:

中文网站:https://leetcode-cn.com

国际网站:https://leetcode-cn.com

建议先在中文网站上刷题,中文网看完去国际网看下国际上大牛的解题思路。

Array(数组)

直接上实战题目:

移动零:

题目描述

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

例子:

输入: [0,1,0,3,12]

输出: [1,3,12,0,0]

说明:

必须在原数组上操作,不能拷贝额外的数组。

尽量减少操作次数。

解决方法:

  1. 双指针法(中文网推荐解法)

思路:

使用两个指针(开始都在下标为0的位置),分别代表着非0和0的数量,第一个指针的左边代表着被处理好的数据,第二个指针进行数据处理,从下标0的位置开始判断数组里面的元素,如果为非0就跟第一个指针的元素进行替换位置。

   结果你会发现:

左指针左边均为非零数;

右指针左边直到左指针处均为零。

每次交换,都是将左指针的零与右指针的非零数交换(说到底就是0元素和非0替换)

以下为答题:

时间复杂度为O(n)

6ac56cfd325d585289e7cbe9a7cc0072.png

2.把非0的往前挪,后面补零

这个方法精妙在于不需要交换位置,直接遍历数组,发现非0的直接往前挪,最后剩余位置补零。

4cdbf16d0f1fde4291b241656e4b3d35.png

第二种方法比较省时间,在leetcode提交结果:

a56965c4e68b9436e1f26be5c655a3fe.png

dab7ebd68c3b4f11fbfe4ac20e4752bb.png

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值