数组移动元素算法详解
🎈 作者:
🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C++、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊!
🎈 关注专栏: (优质好文持续更新中……)🚀
🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬
一、题目描述
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
约束:
(1)必须在原数组上操作,不能拷贝额外的数组;
(2)尽量减少操作次数;
二、测试样例
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明: 将输入中的两个 0 移动到数组最后,其它元素顺序不变
三、算法思路
本题在限制条件中约束较多,从约束中不难看出,实际采用的算法不需要额外的数组来存储,只能通过遍历有限次数组来解决。
使用变量 num 统计已访问元素中 0 的个数,如果当前元素非 0,那么,前面 num 个元素必定也为 0,将 nums[i] 与 nums[i - num] 交换即可,交换后继续遍历剩余的元素,直到遍历完所有元素。
四、代码实现
五、复杂度分析
5.1 时间复杂度
时间复杂度为:O(n),其中,n 为 数组长度,在上述算法中,只遍历了一遍数组,故时间复杂度为O(n)。
5.2 空间复杂度
空间复杂度为:O(1),在上述算法中仅仅使用到了变量 num 来统计已遍历元素 0 的个数,可以忽略,故空间复杂度为 O(1)。
六、总结
本题主要考查对数组操作的理解,比较简单!
CSDN博客专家🏆,华为云享专家🏆,Linux、C/C++、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊!
欢迎小伙伴们点赞👍、收藏⭐、留言💬
- 点赞
- 收藏
- 关注作者
评论(0)