数组移动元素算法详解
【摘要】 🎈 作者:Linux猿
🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C++、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊!
🎈 关注专栏:LeetCode面试必备100题 (优质好文持续更新中……)🚀
🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬
🎈 作者:
🎈 简介: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++、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊!
欢迎小伙伴们点赞👍、收藏⭐、留言💬
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)