算法随笔_31:移动零

上一篇:算法随笔_30: 去除重复字母-CSDN博客

=====

题目描述如下:

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

请注意 ,必须在不复制数组的情况下原地对数组进行操作。

示例 1:

复制代码
输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]

=====

算法思路:

题目要求原地对数组进行操作。我们可以设两个下标指针p1,p2,p1=0,p2=0。

然后从左往右枚举数组,先不断移动p2,如果p2处不为0,我们把p1的元素和p2所指元素交换,然后继续移动p1。如果p2处为0,我们继续移动p2。

以此类推,直到p2到达数组末尾。此时的数组已经符合题目要求。

复制代码
class Solution(object):
    def moveZeroes(self, nums):
        
        p1=0
        p2=0
        nums_len=len(nums)
        while p2<nums_len:
            if nums[p2]!=0:
                nums[p1],nums[p2]=nums[p2],nums[p1]
                p1+=1
            
            p2+=1

此算法的时间复杂度为O(n) 。

相关推荐
刘某的Cloud2 分钟前
列表、元组、字典、集合-组合数据类型
linux·开发语言·python
XFF不秃头12 分钟前
力扣刷题笔记-全排列
c++·笔记·算法·leetcode
ys~~18 分钟前
git学习
git·vscode·python·深度学习·学习·nlp·github
Mqh18076219 分钟前
day46 Grad-CAM
python
菜鸟233号27 分钟前
力扣669 修剪二叉搜索树 java实现
java·数据结构·算法·leetcode
郝学胜-神的一滴36 分钟前
Python魔法函数一览:解锁面向对象编程的奥秘
开发语言·python·程序人生
光羽隹衡41 分钟前
机械学习逻辑回归——银行贷款案例
算法·机器学习·逻辑回归
白露与泡影1 小时前
使用systemd,把服务装进 Linux 心脏里~
linux·运维·python
能源系统预测和优化研究1 小时前
创新点解读:基于非线性二次分解的Ridge-RF-XGBoost时间序列预测(附代码实现)
人工智能·深度学习·算法
执笔论英雄1 小时前
【RL】ROLL下载模型流程
人工智能·算法·机器学习