算法随笔_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) 。

相关推荐
lbb 小魔仙几秒前
Git + Python 项目工作流最佳实践:pre-commit、CI、CHANGELOG 自动化
git·python·ci/cd
yuannl102 分钟前
图的深度优先遍历DFS
数据结构
dyxal5 分钟前
最长公共子序列(LCS)
python·算法
你驴我27 分钟前
WhatsApp Cloud API 速率限制下的令牌桶与退避策略实践
网络·后端·python
AC赳赳老秦30 分钟前
司法公开数据采集应用:OpenClaw 抓取裁判文书公开信息,批量整理同类参考案例
java·大数据·python·数据挖掘·数据分析·php·openclaw
小大宇1 小时前
Python 集成 Conda
开发语言·python·conda
初学者,亦行者2 小时前
利用Pyecharts绘制堆叠柱状图
python·信息可视化·数据分析
林泽毅2 小时前
PyTRIO:当强化学习不再需要本地GPU
人工智能·python·深度学习·机器学习
小陈phd2 小时前
QAnything 阅读优化策略05——检索
人工智能·python·机器学习
ruofu332 小时前
wsl端是py312,但是项目是py311, 如何下载py311的依赖包(wheels)
python·docker